blob: 716c26107ef10aa67142aa8631f9069ad5b84b14 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.apisupport.project.ui.wizard.updatecenter;
import java.io.IOException;
import java.util.Collections;
import java.util.Map;
import java.util.jar.Manifest;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.netbeans.modules.apisupport.project.ui.wizard.common.CreatedModifiedFiles;
import org.netbeans.modules.apisupport.project.api.ManifestManager;
import org.netbeans.modules.apisupport.project.api.Util;
import org.netbeans.modules.apisupport.project.api.LayerHandle;
import org.netbeans.modules.apisupport.project.spi.NbModuleProvider;
import org.netbeans.modules.apisupport.project.ui.wizard.common.BasicWizardIterator;
import org.openide.WizardDescriptor;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileSystem;
/**
* Data model used across the <em>New Update Center Wizard</em>.
* @author Jiri Rechtacek
*/
final class DataModel extends BasicWizardIterator.BasicDataModel {
static private String AUTOUPDATE_TYPES = "Services/AutoupdateType"; //NOI18N
private String AUTOUPDATE_SERVICE_TYPE = "_update_center"; //NOI18N
static private String AUTOUPDATE_SETTINGS_TYPE_EXT = "settings"; //NOI18N
static private String AUTOUPDATE_INSTANCE_TYPE_EXT = "instance"; //NOI18N
static private String AUTOUPDATE_MODULE = "org.netbeans.modules.autoupdate"; // NOI18N
static private String AUTOUPDATE_MODULE_NEW = "org.netbeans.modules.autoupdate.services"; // NOI18N
private CreatedModifiedFiles cmf;
// third panel data (Name, and Location)
private String ucUrl;
private String ucDisplayName;
DataModel(WizardDescriptor wiz) {
super(wiz);
}
private CreatedModifiedFiles regenerate () {
if (cmf == null) {
cmf = new CreatedModifiedFiles (getProject ());
}
boolean newAPI = true;
try {
newAPI = getModuleInfo().getDependencyVersion(AUTOUPDATE_MODULE_NEW) != null;
} catch (IOException x) {
Logger.getLogger(DataModel.class.getName()).log(Level.INFO, null, x);
}
String extension = (newAPI) ? AUTOUPDATE_INSTANCE_TYPE_EXT : AUTOUPDATE_SETTINGS_TYPE_EXT;
FileObject template = newAPI ? null : CreatedModifiedFiles.getTemplate("update_center.xml"); // NOI18N
String serviceTypeName = getModuleInfo().getCodeNameBase ().replace ('.', '_') + AUTOUPDATE_SERVICE_TYPE; // NOI18N
FileSystem layer = LayerHandle.forProject (getProject ()).layer (false);
String pathToAutoUpdateType = AUTOUPDATE_TYPES + '/' + serviceTypeName + '.' + extension;
int sequence = 0;
if (layer != null) {
FileObject f;
do {
f = layer.findResource (pathToAutoUpdateType);
if (f != null) {
pathToAutoUpdateType = AUTOUPDATE_TYPES + '/' + serviceTypeName + '_' + ++sequence + '.' + extension;
}
} while (f != null);
}
String codename = null;
NbModuleProvider mp = getProject().getLookup().lookup(NbModuleProvider.class);
Manifest mani = Util.getManifest(mp.getManifestFile());
if (mani != null) {
codename = mani.getMainAttributes().getValue("OpenIDE-Module"); // NOI18N
}
if (codename == null) {
codename = getModuleInfo().getCodeNameBase();
}
final Map<String, String> substitutionTokens = newAPI ? null : Collections.singletonMap("MODULECODENAME", codename);
cmf.add(cmf.createLayerEntry(pathToAutoUpdateType, template, substitutionTokens, null, null)); // NOI18N
if (newAPI) {
cmf.add (cmf.createLayerAttribute (pathToAutoUpdateType, "instanceCreate", "methodvalue:org.netbeans.modules.autoupdate.updateprovider.AutoupdateCatalogFactory.createUpdateProvider")); //NOI18N
cmf.add (cmf.createLayerAttribute (pathToAutoUpdateType, "instanceOf", "org.netbeans.spi.autoupdate.UpdateProvider")); //NOI18N
}
String url_key_base = getModuleInfo().getCodeNameBase ().replace ('.', '_') + AUTOUPDATE_SERVICE_TYPE; //NOI18N
String url_key = sequence == 0 ? url_key_base : url_key_base + '_' + sequence; // NOI18N
cmf.add (cmf.createLayerAttribute (pathToAutoUpdateType, "enabled", Boolean.TRUE)); //NOI18N
// write into bundle
ManifestManager mm = ManifestManager.getInstance(Util.getManifest(getModuleInfo().getManifestFile()), false);
String localizingBundle = mm.getLocalizingBundle ();
localizingBundle = localizingBundle.substring (0, localizingBundle.indexOf ('.'));
localizingBundle = localizingBundle.replace ('/', '.');
cmf.add (cmf.createLayerAttribute (pathToAutoUpdateType,
"displayName", "bundlevalue:" + localizingBundle + "#" + pathToAutoUpdateType));
cmf.add(cmf.createLayerAttribute(pathToAutoUpdateType, "url", "bundlevalue:" + localizingBundle + "#" + url_key)); //NOI18N
cmf.add (cmf.bundleKeyDefaultBundle (pathToAutoUpdateType, ucDisplayName));
cmf.add (cmf.bundleKeyDefaultBundle (url_key, ucUrl));
// add dependency to autoupdate module
cmf.add(cmf.addModuleDependency(newAPI ? AUTOUPDATE_MODULE_NEW : AUTOUPDATE_MODULE, null, null, false));
return cmf;
}
CreatedModifiedFiles refreshCreatedModifiedFiles() {
return regenerate ();
}
void setUpdateCenterURL (String url) {
this.ucUrl = url;
}
String getUpdateCenterURL () {
return ucUrl != null ? ucUrl : ""; //NOI18N
}
void setUpdateCenterDisplayName (String name) {
this.ucDisplayName = name;
}
String getUpdateCenterDisplayName () {
return ucDisplayName != null ? ucDisplayName : ""; //NOI18N
}
}