|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.j2ee.deployment.config;
import java.io.File;
import java.io.IOException;
import java.util.*;
import javax.enterprise.deploy.shared.ModuleType;
import org.openide.actions.*;
import org.openide.filesystems.*;
import org.openide.util.Lookup;
import org.openide.loaders.*;
import org.openide.util.NbBundle;
import org.openide.util.actions.SystemAction;
import org.netbeans.api.project.FileOwnerQuery;
import org.netbeans.api.project.Project;
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider;
import org.netbeans.modules.j2ee.deployment.impl.*;
import org.netbeans.modules.j2ee.deployment.plugins.api.DeploymentPlanSplitter;
/** Loader for deployment plan files
* Permits viewing/editing of them.
* @author Pavel Buzek
*/
public class ConfigDataLoader extends MultiFileLoader implements FileChangeListener {
/** Generated serial version UID. */
// private static final long serialVersionUID = ;
private static final String GENERIC_EXTENSION = "dpf"; //NOI18N
private static final String PRIMARY = "primary"; //NOI18N
private static final String SECONDARY = "secondary"; //NOI18N
private static final String SERVER = "server"; //NOI18N
/** Creates loader. */
public ConfigDataLoader () {
super("org.netbeans.modules.j2ee.deployment.config.ConfigDataObject"); // NOI18N
}
// PENDING who needs this constructor?
/** Creates loader for specified recognized class. */
public ConfigDataLoader (Class recognizedObject) {
super(recognizedObject);
}
/** Initizalized loader, i.e. its extension list. Overrides superclass method. */
protected void initialize () {
super.initialize();
checkCache ();
}
/** Gets default display name. Overrides superclass method. */
protected String defaultDisplayName() {
return NbBundle.getMessage (ConfigDataLoader.class, "LBL_loaderName");
}
/** Gets default system actions. Overrides superclass method. */
protected SystemAction[] defaultActions() {
return new SystemAction[] {
SystemAction.get (OpenAction.class),
SystemAction.get (EditAction.class),
SystemAction.get (FileSystemAction.class),
null,
SystemAction.get (CutAction.class),
SystemAction.get (CopyAction.class),
SystemAction.get (PasteAction.class),
null,
SystemAction.get (DeleteAction.class),
null,
SystemAction.get (ToolsAction.class),
SystemAction.get (PropertiesAction.class),
};
}
/** Creates multi data objcte for specified primary file.
* Implements superclass abstract method. */
protected MultiDataObject createMultiObject (FileObject primaryFile)
throws DataObjectExistsException, IOException {
return new ConfigDataObject (primaryFile, this, getPrimaryByName (primaryFile.getNameExt ()), getServerStringByName (primaryFile.getNameExt ()));
}
protected org.openide.loaders.MultiDataObject.Entry createPrimaryEntry (MultiDataObject obj, FileObject primaryFile) {
return new FileEntry (obj, primaryFile);
}
protected org.openide.loaders.MultiDataObject.Entry createSecondaryEntry (MultiDataObject obj, FileObject secondaryFile) {
return new FileEntry (obj, secondaryFile);
}
protected FileObject findPrimaryFile (FileObject fo) {
// never recognize folders.
if (fo.isFolder()) return null;
String ext = fo.getExt();
String primaryName = fo.getNameExt ();
String primaryPath = getPrimaryByName(primaryName);
FileObject primaryFO = null;
String secondPrimaryName = null;
if (primaryPath != null || ext.equals(GENERIC_EXTENSION)) {
primaryFO = fo;
} else { // check for secondary file and load its primary
secondPrimaryName = getPrimaryBySecondaryName (primaryName);
}
if (primaryFO == null && secondPrimaryName == null)
return null;
Project owner = FileOwnerQuery.getOwner(fo);
if (owner != null) {
Lookup l = owner.getLookup();
J2eeModuleProvider projectModule = (J2eeModuleProvider) l.lookup(J2eeModuleProvider.class);
if (projectModule != null) {
if (primaryFO != null) {
primaryFO = projectModule.findDeploymentConfigurationFile(primaryName);
if (primaryFO != null) {
File primary = FileUtil.toFile(primaryFO);
if (primary != null && primary.equals(FileUtil.toFile(fo))) {
return fo;
}
}
} else { // look for primary FO from secondary
return projectModule.findDeploymentConfigurationFile(secondPrimaryName);
}
}
}
return null;
}
private String getPrimaryByName (String name) {
HashMap p = (HashMap) getProperty (PRIMARY);
return (String) p.get (name);
}
private String getPrimaryBySecondaryName (String name) {
HashMap p = (HashMap) getProperty (SECONDARY);
return (String) p.get (name);
}
private ServerString getServerStringByName (String name) {
HashMap p = (HashMap) getProperty (SERVER);
return new ServerString ((String) p.get (name), null, null);
}
//this is only a workaround for getStringTable being protected in ModuleType
private static final class MT extends ModuleType {
private MT (int i) {
super (i);
}
//return map of MT name in upperCase -> MT instance
private HashMap getMTMap () {
String t [] = getStringTable ();
HashMap m = new HashMap ();
for (int i = 0; i < t.length; i ++) {
m.put (t [i].toUpperCase (), ModuleType.getModuleType (i));
}
return m;
}
}
private void checkCache () {
HashMap serverByName = new HashMap ();
HashMap primaryByName = new HashMap ();
HashMap secondaryByName = new HashMap ();
Repository rep = (Repository) Lookup.getDefault().lookup(Repository.class);
assert rep != null;
FileObject dir = rep.getDefaultFileSystem().findResource(ServerRegistry.DIR_JSR88_PLUGINS);
if (dir != null) {
dir.addFileChangeListener(this);
FileObject[] servers = dir.getChildren();
for(int _servers = 0; _servers < servers.length; _servers ++) {
String serverName = servers[_servers].getName ();
FileObject deplFNames = servers [_servers].getFileObject ("DeploymentFileNames"); //NOI18N
if (deplFNames != null) {
FileObject mTypes [] = deplFNames.getChildren ();
HashMap mtMap = new MT (0).getMTMap ();
for (int _mTypes = 0; _mTypes < mTypes.length; _mTypes ++) {
String mTypeName = mTypes [_mTypes].getName ();
ModuleType mt = (ModuleType) mtMap.get (mTypeName.toUpperCase ());
FileObject allNames [] = mTypes [_mTypes].getChildren ();
String primName = null;
for (int i = 0; i < allNames.length; i++) {
String fname = allNames [i].getNameExt ();
int lastSlash = fname.lastIndexOf ('/');
if (lastSlash == -1) {
lastSlash = fname.lastIndexOf ('\\'); //try both variants
}
lastSlash ++;
String shortName = fname.substring (lastSlash);
if (i == 0) {
primName = shortName;
primaryByName.put (shortName, fname.replace ('\\', '/')); //just in case..
} else {
secondaryByName.put (shortName, primName); //just in case..
}
serverByName.put (shortName, serverName);
}
}
}
}
}
putProperty (PRIMARY, primaryByName);
putProperty (SECONDARY, secondaryByName);
putProperty (SERVER, serverByName);
}
private FileObject findPrimary (FileObject fo, String secondaryName, String primaryName) {
String secPath = fo.getPath ();
String primPath = secPath.substring (0, secPath.length () - secondaryName.length ()) + primaryName;
try {
return fo.getFileSystem ().findResource (primPath);
} catch (FileStateInvalidException e) {
org.openide.ErrorManager.getDefault ().log (e.getLocalizedMessage ());
return null;
}
}
public void fileAttributeChanged (FileAttributeEvent fe) {
}
public void fileChanged (FileEvent fe) {
checkCache ();
}
public void fileDataCreated (FileEvent fe) {
checkCache ();
}
public void fileDeleted (FileEvent fe) {
checkCache ();
}
public void fileFolderCreated (FileEvent fe) {
checkCache ();
}
public void fileRenamed (FileRenameEvent fe) {
checkCache ();
}
public static String getStandardDeploymentPlanName(Server server) {
return server.getShortName() + "." + GENERIC_EXTENSION; //NOI18N
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.