mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-29 20:05:35 +02:00
[187647] provide a persistence provider that stores profiles outside the workspace
This commit is contained in:
parent
04efec958b
commit
6619b767ee
13 changed files with 840 additions and 377 deletions
|
@ -28,7 +28,6 @@
|
||||||
value="workspace">
|
value="workspace">
|
||||||
</property>
|
</property>
|
||||||
</persistenceProvider>
|
</persistenceProvider>
|
||||||
<!--
|
|
||||||
<persistenceProvider
|
<persistenceProvider
|
||||||
autostart="true"
|
autostart="true"
|
||||||
class="org.eclipse.rse.internal.persistence.PropertyFileProvider"
|
class="org.eclipse.rse.internal.persistence.PropertyFileProvider"
|
||||||
|
@ -39,7 +38,6 @@
|
||||||
value="metadata">
|
value="metadata">
|
||||||
</property>
|
</property>
|
||||||
</persistenceProvider>
|
</persistenceProvider>
|
||||||
-->
|
|
||||||
</extension>
|
</extension>
|
||||||
|
|
||||||
<!-- ================================================================= -->
|
<!-- ================================================================= -->
|
||||||
|
|
|
@ -100,6 +100,13 @@ public interface ISystemProfile extends IRSEModelObject {
|
||||||
*/
|
*/
|
||||||
public boolean isActive();
|
public boolean isActive();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Activates or deactivates a profile. If the profile is already in the
|
||||||
|
* requested state, this will do nothing.
|
||||||
|
* @param flag true to activate the profile, false to deactivate it.
|
||||||
|
*/
|
||||||
|
public void setActive(boolean flag);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Each profile is persisted by a persistence provider. This returns the instance of the
|
* Each profile is persisted by a persistence provider. This returns the instance of the
|
||||||
* persistence provider used for this profile. New profiles will use the default persistence
|
* persistence provider used for this profile. New profiles will use the default persistence
|
||||||
|
|
|
@ -86,6 +86,7 @@ public interface ISystemProfileManager {
|
||||||
* Get the index of a profile given its name.
|
* Get the index of a profile given its name.
|
||||||
* @param profileName the name of the profile to look for.
|
* @param profileName the name of the profile to look for.
|
||||||
* @return 0-based position of the given active profile within the list of active profiles.
|
* @return 0-based position of the given active profile within the list of active profiles.
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public int getActiveSystemProfilePosition(String profileName);
|
public int getActiveSystemProfilePosition(String profileName);
|
||||||
|
|
||||||
|
@ -138,8 +139,12 @@ public interface ISystemProfileManager {
|
||||||
*/
|
*/
|
||||||
public List getProfiles();
|
public List getProfiles();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a system profile to this profile manager.
|
||||||
|
* @param profile The system profile to add.
|
||||||
|
*/
|
||||||
public void addSystemProfile(ISystemProfile profile);
|
public void addSystemProfile(ISystemProfile profile);
|
||||||
|
|
||||||
// /**
|
// /**
|
||||||
// * Reusable method to return a name validator for renaming a profile.
|
// * Reusable method to return a name validator for renaming a profile.
|
||||||
// * @param the current profile name on updates. Can be null for new profiles. Used
|
// * @param the current profile name on updates. Can be null for new profiles. Used
|
||||||
|
@ -153,4 +158,4 @@ public interface ISystemProfileManager {
|
||||||
// */
|
// */
|
||||||
// public ISystemValidator getProfileNameValidator(ISystemProfile profile);
|
// public ISystemValidator getProfileNameValidator(ISystemProfile profile);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* This program and the accompanying materials are made available under the terms
|
* This program and the accompanying materials are made available under the terms
|
||||||
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
|
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
|
||||||
* available at http://www.eclipse.org/legal/epl-v10.html
|
* available at http://www.eclipse.org/legal/epl-v10.html
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* David Dykstal (IBM) - initial API and implementation
|
* David Dykstal (IBM) - initial API and implementation
|
||||||
********************************************************************************/
|
********************************************************************************/
|
||||||
|
@ -24,7 +24,7 @@ public class RSEPreferenceInitializer extends AbstractPreferenceInitializer {
|
||||||
// the simple preferences
|
// the simple preferences
|
||||||
Preferences prefs = RSECorePlugin.getDefault().getPluginPreferences();
|
Preferences prefs = RSECorePlugin.getDefault().getPluginPreferences();
|
||||||
// The ID of the default persistence provider
|
// The ID of the default persistence provider
|
||||||
prefs.setDefault(IRSEPreferenceNames.DEFAULT_PERSISTENCE_PROVIDER, "org.eclipse.rse.persistence.PropertyFileProvider"); //$NON-NLS-1$
|
prefs.setDefault(IRSEPreferenceNames.DEFAULT_PERSISTENCE_PROVIDER, "org.eclipse.rse.persistence.MetadataPropertyFileProvider"); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,8 +37,6 @@ import org.eclipse.rse.persistence.IRSEPersistenceProvider;
|
||||||
public class SystemProfileManager implements ISystemProfileManager {
|
public class SystemProfileManager implements ISystemProfileManager {
|
||||||
|
|
||||||
private List _profiles = new ArrayList(10);
|
private List _profiles = new ArrayList(10);
|
||||||
// private String[] profileNames = null;
|
|
||||||
// private Vector profileNamesVector = null;
|
|
||||||
private static SystemProfileManager singleton = null;
|
private static SystemProfileManager singleton = null;
|
||||||
private boolean restoring = false;
|
private boolean restoring = false;
|
||||||
|
|
||||||
|
@ -57,17 +55,23 @@ public class SystemProfileManager implements ISystemProfileManager {
|
||||||
if (singleton == null) {
|
if (singleton == null) {
|
||||||
singleton = new SystemProfileManager();
|
singleton = new SystemProfileManager();
|
||||||
RSECorePlugin.getThePersistenceManager().restoreProfiles(5000);
|
RSECorePlugin.getThePersistenceManager().restoreProfiles(5000);
|
||||||
|
singleton.ensureDefaultPrivateProfile();
|
||||||
|
singleton.ensureDefaultTeamProfile();
|
||||||
}
|
}
|
||||||
return singleton;
|
return singleton;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear the default after a team sychronization say
|
* Clear the default after a team synchronization say
|
||||||
*/
|
*/
|
||||||
public static void clearDefault() {
|
public static void clearDefault() {
|
||||||
singleton = null;
|
singleton = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRestoring(boolean flag) {
|
||||||
|
restoring = flag;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new profile with the given name, and add to the list.
|
* Create a new profile with the given name, and add to the list.
|
||||||
* The name must be unique within the existing list.
|
* The name must be unique within the existing list.
|
||||||
|
@ -156,10 +160,23 @@ public class SystemProfileManager implements ISystemProfileManager {
|
||||||
// profileNamesVector = null;
|
// profileNamesVector = null;
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
|
|
||||||
|
public ISystemProfile getSystemProfile(String name) {
|
||||||
|
ISystemProfile result = null;
|
||||||
|
for (Iterator z = _profiles.iterator(); z.hasNext();) {
|
||||||
|
ISystemProfile p = (ISystemProfile) z.next();
|
||||||
|
if (p.getName().equals(name)) {
|
||||||
|
result = p;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.rse.core.model.ISystemProfileManager#getSystemProfile(java.lang.String)
|
* @see org.eclipse.rse.core.model.ISystemProfileManager#getSystemProfile(java.lang.String)
|
||||||
*/
|
*/
|
||||||
public ISystemProfile getSystemProfile(String name) {
|
private ISystemProfile getSystemProfileOld(String name) {
|
||||||
ISystemProfile[] profiles = getSystemProfiles();
|
ISystemProfile[] profiles = getSystemProfiles();
|
||||||
if ((profiles == null) || (profiles.length == 0)) return null;
|
if ((profiles == null) || (profiles.length == 0)) return null;
|
||||||
ISystemProfile match = null;
|
ISystemProfile match = null;
|
||||||
|
@ -209,11 +226,16 @@ public class SystemProfileManager implements ISystemProfileManager {
|
||||||
ISystemProfile newProfile = createSystemProfile(newName, false);
|
ISystemProfile newProfile = createSystemProfile(newName, false);
|
||||||
return newProfile;
|
return newProfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isSystemProfileActive(String profileName) {
|
||||||
|
ISystemProfile profile = getSystemProfile(profileName);
|
||||||
|
return profile.isActive();
|
||||||
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.rse.core.model.ISystemProfileManager#isSystemProfileActive(java.lang.String)
|
* @see org.eclipse.rse.core.model.ISystemProfileManager#isSystemProfileActive(java.lang.String)
|
||||||
*/
|
*/
|
||||||
public boolean isSystemProfileActive(String profileName) {
|
private boolean isSystemProfileActiveOld(String profileName) {
|
||||||
String[] activeProfiles = getActiveSystemProfileNames();
|
String[] activeProfiles = getActiveSystemProfileNames();
|
||||||
boolean match = false;
|
boolean match = false;
|
||||||
for (int idx = 0; !match && (idx < activeProfiles.length); idx++) {
|
for (int idx = 0; !match && (idx < activeProfiles.length); idx++) {
|
||||||
|
@ -226,19 +248,39 @@ public class SystemProfileManager implements ISystemProfileManager {
|
||||||
* @see org.eclipse.rse.core.model.ISystemProfileManager#getActiveSystemProfiles()
|
* @see org.eclipse.rse.core.model.ISystemProfileManager#getActiveSystemProfiles()
|
||||||
*/
|
*/
|
||||||
public ISystemProfile[] getActiveSystemProfiles() {
|
public ISystemProfile[] getActiveSystemProfiles() {
|
||||||
String[] profileNames = getActiveSystemProfileNames();
|
List activeProfiles = new ArrayList();
|
||||||
ISystemProfile[] profiles = new ISystemProfile[profileNames.length];
|
for (Iterator z = _profiles.iterator(); z.hasNext();) {
|
||||||
for (int idx = 0; idx < profileNames.length; idx++) {
|
ISystemProfile p = (ISystemProfile) z.next();
|
||||||
profiles[idx] = getOrCreateSystemProfile(profileNames[idx]);
|
if (p.isActive()) {
|
||||||
((SystemProfile) profiles[idx]).setActive(true);
|
activeProfiles.add(p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return profiles;
|
ISystemProfile[] result = new ISystemProfile[activeProfiles.size()];
|
||||||
|
activeProfiles.toArray(result);
|
||||||
|
return result;
|
||||||
|
// String[] profileNames = getActiveSystemProfileNames();
|
||||||
|
// ISystemProfile[] profiles = new ISystemProfile[profileNames.length];
|
||||||
|
// for (int idx = 0; idx < profileNames.length; idx++) {
|
||||||
|
// profiles[idx] = getOrCreateSystemProfile(profileNames[idx]);
|
||||||
|
// ((SystemProfile) profiles[idx]).setActive(true);
|
||||||
|
// }
|
||||||
|
// return profiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getActiveSystemProfileNames() {
|
||||||
|
ISystemProfile[] profiles = getActiveSystemProfiles();
|
||||||
|
String[] names = new String[profiles.length];
|
||||||
|
for (int i = 0; i < profiles.length; i++) {
|
||||||
|
ISystemProfile systemProfile = profiles[i];
|
||||||
|
names[i] = systemProfile.getName();
|
||||||
|
}
|
||||||
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.rse.core.model.ISystemProfileManager#getActiveSystemProfileNames()
|
* @see org.eclipse.rse.core.model.ISystemProfileManager#getActiveSystemProfileNames()
|
||||||
*/
|
*/
|
||||||
public String[] getActiveSystemProfileNames() {
|
private String[] getActiveSystemProfileNamesOld() {
|
||||||
String[] activeProfileNames = RSEPreferencesManager.getActiveProfiles();
|
String[] activeProfileNames = RSEPreferencesManager.getActiveProfiles();
|
||||||
// dy: defect 48355, need to sync this with the actual profile list. If the user
|
// dy: defect 48355, need to sync this with the actual profile list. If the user
|
||||||
// imports old preference settings or does a team sync and a profile is deleted then
|
// imports old preference settings or does a team sync and a profile is deleted then
|
||||||
|
@ -327,6 +369,7 @@ public class SystemProfileManager implements ISystemProfileManager {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the profile names currently selected by the user as "active" profiles
|
* @return the profile names currently selected by the user as "active" profiles
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public Vector getActiveSystemProfileNamesVector() {
|
public Vector getActiveSystemProfileNamesVector() {
|
||||||
String[] profileNames = RSEPreferencesManager.getActiveProfiles();
|
String[] profileNames = RSEPreferencesManager.getActiveProfiles();
|
||||||
|
@ -384,35 +427,25 @@ public class SystemProfileManager implements ISystemProfileManager {
|
||||||
*/
|
*/
|
||||||
public void addSystemProfile(ISystemProfile profile) {
|
public void addSystemProfile(ISystemProfile profile) {
|
||||||
_profiles.add(profile);
|
_profiles.add(profile);
|
||||||
|
profile.setProfileManager(this);
|
||||||
String name = profile.getName();
|
String name = profile.getName();
|
||||||
if (profile.isActive()) {
|
if (profile.isActive()) {
|
||||||
RSEPreferencesManager.addActiveProfile(name);
|
RSEPreferencesManager.addActiveProfile(name);
|
||||||
}
|
}
|
||||||
profile.setDefaultPrivate(name.equalsIgnoreCase(RSEPreferencesManager.getDefaultPrivateSystemProfileName()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ISystemProfile[] getSystemProfiles(boolean ensureDefaultPrivateProfileExists) {
|
private void createDefaultPrivateProfile() {
|
||||||
if (ensureDefaultPrivateProfileExists) {
|
String initProfileName = RSEPreferencesManager.getDefaultPrivateSystemProfileName();
|
||||||
ensureDefaultPrivateProfile();
|
ISystemProfile profile = internalCreateSystemProfile(initProfileName);
|
||||||
}
|
profile.setDefaultPrivate(true);
|
||||||
ISystemProfile[] result = new ISystemProfile[_profiles.size()];
|
|
||||||
_profiles.toArray(result);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRestoring(boolean flag) {
|
|
||||||
restoring = flag;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ISystemProfile internalCreateSystemProfile(String name) {
|
private ISystemProfile internalCreateSystemProfile(String name) {
|
||||||
ISystemProfile newProfile = new SystemProfile();
|
ISystemProfile profile = new SystemProfile();
|
||||||
newProfile.setName(name);
|
profile.setName(name);
|
||||||
newProfile.setProfileManager(this);
|
addSystemProfile(profile);
|
||||||
_profiles.add(newProfile);
|
return profile;
|
||||||
// invalidateCache();
|
}
|
||||||
newProfile.setDefaultPrivate(name.equalsIgnoreCase(RSEPreferencesManager.getDefaultPrivateSystemProfileName()));
|
|
||||||
return newProfile;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ensureDefaultPrivateProfile() {
|
private void ensureDefaultPrivateProfile() {
|
||||||
// Ensure that one Profile is the default Profile - defect 48995 NH
|
// Ensure that one Profile is the default Profile - defect 48995 NH
|
||||||
|
@ -450,27 +483,35 @@ public class SystemProfileManager implements ISystemProfileManager {
|
||||||
createDefaultPrivateProfile();
|
createDefaultPrivateProfile();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createDefaultPrivateProfile() {
|
private void ensureDefaultTeamProfile() {
|
||||||
ISystemProfile profile = new SystemProfile();
|
String name = RSEPreferencesManager.getDefaultTeamProfileName();
|
||||||
String initProfileName = RSEPreferencesManager.getDefaultPrivateSystemProfileName();
|
ISystemProfile teamProfile = getSystemProfile(name);
|
||||||
profile.setName(initProfileName);
|
if (teamProfile == null) {
|
||||||
profile.setDefaultPrivate(true);
|
teamProfile = internalCreateSystemProfile(name);
|
||||||
_profiles = new ArrayList();
|
|
||||||
_profiles.add(profile);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiate a user profile given its name.
|
|
||||||
* @param userProfileName the name of the profile to find or create
|
|
||||||
* @return the profile that was found or created.
|
|
||||||
*/
|
|
||||||
private ISystemProfile getOrCreateSystemProfile(String userProfileName) {
|
|
||||||
ISystemProfile userProfile = getSystemProfile(userProfileName);
|
|
||||||
if (userProfile == null) {
|
|
||||||
userProfile = internalCreateSystemProfile(userProfileName);
|
|
||||||
}
|
}
|
||||||
return userProfile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
private ISystemProfile[] getSystemProfiles(boolean ensureDefaultPrivateProfileExists) {
|
||||||
|
if (ensureDefaultPrivateProfileExists) {
|
||||||
|
ensureDefaultPrivateProfile();
|
||||||
|
}
|
||||||
|
ISystemProfile[] result = new ISystemProfile[_profiles.size()];
|
||||||
|
_profiles.toArray(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * Instantiate a user profile given its name.
|
||||||
|
// * @param userProfileName the name of the profile to find or create
|
||||||
|
// * @return the profile that was found or created.
|
||||||
|
// */
|
||||||
|
// private ISystemProfile getOrCreateSystemProfile(String userProfileName) {
|
||||||
|
// ISystemProfile userProfile = getSystemProfile(userProfileName);
|
||||||
|
// if (userProfile == null) {
|
||||||
|
// userProfile = internalCreateSystemProfile(userProfileName);
|
||||||
|
// }
|
||||||
|
// return userProfile;
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2007 IBM Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.rse.internal.persistence;
|
||||||
|
|
||||||
|
interface PFConstants {
|
||||||
|
|
||||||
|
static final String PROPERTIES_FILE_NAME = "node.properties"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Metatype names
|
||||||
|
* each entry is an array. The first is the preferred name.
|
||||||
|
* The other names are acceptable alternates.
|
||||||
|
* Names must not contain periods or whitespace.
|
||||||
|
* Lowercase letters, numbers and dashes (-) are preferred.
|
||||||
|
*/
|
||||||
|
static final String[] MT_ATTRIBUTE_TYPE = new String[] { "04-attr-type", "attr-type" }; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
static final String[] MT_ATTRIBUTE = new String[] { "03-attr", "attr" }; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
static final String[] MT_CHILD = new String[] { "06-child", "child" }; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
static final String[] MT_NODE_TYPE = new String[] { "01-type", "01-node-type", "n-type" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||||
|
static final String[] MT_NODE_NAME = new String[] { "00-name", "00-node-name", "n-name" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||||
|
static final String[] MT_REFERENCE = new String[] { "05-ref", "ref" }; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
|
/* Type abbreviations */
|
||||||
|
static final String AB_SUBSYSTEM = "SS"; //$NON-NLS-1$
|
||||||
|
static final String AB_SERVICE_LAUNCHER = "SL"; //$NON-NLS-1$
|
||||||
|
static final String AB_PROPERTY_SET = "PS"; //$NON-NLS-1$
|
||||||
|
static final String AB_PROPERTY = "P"; //$NON-NLS-1$
|
||||||
|
static final String AB_HOST = "H"; //$NON-NLS-1$
|
||||||
|
static final String AB_FILTER_STRING = "FS"; //$NON-NLS-1$
|
||||||
|
static final String AB_FILTER_POOL_REFERENCE = "FPR"; //$NON-NLS-1$
|
||||||
|
static final String AB_FILTER_POOL = "FP"; //$NON-NLS-1$
|
||||||
|
static final String AB_FILTER = "F"; //$NON-NLS-1$
|
||||||
|
static final String AB_CONNECTOR_SERVICE = "CS"; //$NON-NLS-1$
|
||||||
|
static final String AB_PROFILE = "PRF"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2007 IBM Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.rse.internal.persistence;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.rse.core.RSECorePlugin;
|
||||||
|
|
||||||
|
class PFMetadataAnchor implements PFPersistenceAnchor {
|
||||||
|
|
||||||
|
public IStatus deleteProfileLocation(String profileName, IProgressMonitor monitor) {
|
||||||
|
IStatus result = Status.OK_STATUS;
|
||||||
|
File profileFolder = getProfileFolder(profileName);
|
||||||
|
if (profileFolder.exists()) {
|
||||||
|
profileFolder.delete();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PFPersistenceLocation getProfileLocation(String profileLocationName) {
|
||||||
|
File profileFolder = getProfileFolder(profileLocationName);
|
||||||
|
PFPersistenceLocation result = new PFMetadataLocation(profileFolder);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getProfileLocationNames() {
|
||||||
|
List names = new Vector(10);
|
||||||
|
File providerFolder = getProviderFolder();
|
||||||
|
File[] profileCandidates = providerFolder.listFiles();
|
||||||
|
for (int i = 0; i < profileCandidates.length; i++) {
|
||||||
|
File profileCandidate = profileCandidates[i];
|
||||||
|
if (profileCandidate.isDirectory()) {
|
||||||
|
String candidateName = profileCandidate.getName();
|
||||||
|
if (candidateName.startsWith(PFConstants.AB_PROFILE)) {
|
||||||
|
names.add(candidateName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String[] result = new String[names.size()];
|
||||||
|
names.toArray(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the folder that acts as the parent for profile folders.
|
||||||
|
*/
|
||||||
|
private File getProviderFolder() {
|
||||||
|
IPath statePath = RSECorePlugin.getDefault().getStateLocation();
|
||||||
|
File stateFolder = new File(statePath.toOSString());
|
||||||
|
File providerFolder = getFolder(stateFolder, "profiles"); //$NON-NLS-1$
|
||||||
|
return providerFolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the File (directory) in which a profile is stored.
|
||||||
|
* @return The folder that was created or found.
|
||||||
|
*/
|
||||||
|
private File getProfileFolder(String profileLocationName) {
|
||||||
|
File providerFolder = getProviderFolder();
|
||||||
|
File profileFolder = getFolder(providerFolder, profileLocationName);
|
||||||
|
return profileFolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the specified folder of the parent container. If the folder does
|
||||||
|
* not exist it creates it.
|
||||||
|
* @param parent the parent folder
|
||||||
|
* @param name the name of the folder to find or create
|
||||||
|
* @return the found or created folder
|
||||||
|
*/
|
||||||
|
private File getFolder(File parent, String name) {
|
||||||
|
File folder = new File(parent, name);
|
||||||
|
if (!folder.exists()) {
|
||||||
|
folder.mkdir();
|
||||||
|
}
|
||||||
|
return folder;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,152 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2007 IBM Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.rse.internal.persistence;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.eclipse.rse.core.RSECorePlugin;
|
||||||
|
|
||||||
|
class PFMetadataLocation implements PFPersistenceLocation {
|
||||||
|
|
||||||
|
private File _baseFolder;
|
||||||
|
|
||||||
|
public PFMetadataLocation(File baseFolder) {
|
||||||
|
_baseFolder = baseFolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ensure() {
|
||||||
|
if (!exists()) {
|
||||||
|
_baseFolder.mkdirs();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public boolean exists() {
|
||||||
|
return _baseFolder.exists();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PFPersistenceLocation getChild(String childName) {
|
||||||
|
File childFolder = new File(_baseFolder, childName);
|
||||||
|
return new PFMetadataLocation(childFolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PFPersistenceLocation[] getChildren() {
|
||||||
|
File[] members = _baseFolder.listFiles();
|
||||||
|
List children = new ArrayList(members.length);
|
||||||
|
for (int i = 0; i < members.length; i++) {
|
||||||
|
File member = members[i];
|
||||||
|
if (member.isDirectory()) {
|
||||||
|
PFPersistenceLocation child = new PFMetadataLocation(member);
|
||||||
|
children.add(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PFPersistenceLocation[] result = new PFPersistenceLocation[children.size()];
|
||||||
|
children.toArray(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InputStream getContents() {
|
||||||
|
InputStream stream = null;
|
||||||
|
File contentsFile = getContentsFile();
|
||||||
|
try {
|
||||||
|
stream = new FileInputStream(contentsFile);
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
logException(e);
|
||||||
|
}
|
||||||
|
return stream;
|
||||||
|
}
|
||||||
|
|
||||||
|
public URI getLocator() {
|
||||||
|
return _baseFolder.toURI();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return _baseFolder.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasContents() {
|
||||||
|
return getContentsFile().exists();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void keepChildren(Set keepSet) {
|
||||||
|
File[] children = _baseFolder.listFiles();
|
||||||
|
for (int i = 0; i < children.length; i++) {
|
||||||
|
File child = children[i];
|
||||||
|
if (!keepSet.contains(child.getName())) {
|
||||||
|
deleteFile(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContents(InputStream stream) {
|
||||||
|
OutputStream out = null;
|
||||||
|
try {
|
||||||
|
out = new FileOutputStream(getContentsFile());
|
||||||
|
byte[] buffer = new byte[1000];
|
||||||
|
int n = stream.read(buffer);
|
||||||
|
while(n > 0) {
|
||||||
|
out.write(buffer, 0, n);
|
||||||
|
n = stream.read(buffer);
|
||||||
|
}
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
logException(e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
logException(e);
|
||||||
|
}
|
||||||
|
if (out != null) {
|
||||||
|
try {
|
||||||
|
out.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
stream.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Force the deletion of the named "file" (which may be a folder).
|
||||||
|
* The file's children must be deleted first.
|
||||||
|
* @param file the file to delete.
|
||||||
|
*/
|
||||||
|
private void deleteFile(File file) {
|
||||||
|
if (file.isDirectory()) {
|
||||||
|
File[] children = file.listFiles();
|
||||||
|
for (int i = 0; i < children.length; i++) {
|
||||||
|
File child = children[i];
|
||||||
|
deleteFile(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
private File getContentsFile() {
|
||||||
|
File contentsFile = new File(_baseFolder, PFConstants.PROPERTIES_FILE_NAME);
|
||||||
|
return contentsFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void logException(Exception e) {
|
||||||
|
RSECorePlugin.getDefault().getLogger().logError("unexpected exception", e); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2007 IBM Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.rse.internal.persistence;
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
|
||||||
|
interface PFPersistenceAnchor {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the names of all valid profiles. Can be used to get a profile
|
||||||
|
* location from getProfileLocation().
|
||||||
|
*/
|
||||||
|
String[] getProfileLocationNames();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param profileName The name of a profile
|
||||||
|
* @param monitor a progress monitor for progress and canceling
|
||||||
|
* @return an IStatus indicating if the delete operation succeeded
|
||||||
|
*/
|
||||||
|
IStatus deleteProfileLocation(String profileName, IProgressMonitor monitor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param profileName the name of the profile to get the location for
|
||||||
|
* @return the location of the profile
|
||||||
|
*/
|
||||||
|
PFPersistenceLocation getProfileLocation(String profileName);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2007 IBM Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.rse.internal.persistence;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
interface PFPersistenceLocation {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if the location actually exists
|
||||||
|
*/
|
||||||
|
boolean exists();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures the existence of the base location
|
||||||
|
*/
|
||||||
|
void ensure();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if the location has contents associated with it. The
|
||||||
|
* contents may be retrieved using getContents()
|
||||||
|
*/
|
||||||
|
boolean hasContents();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the URI of this location. Should only be used for display
|
||||||
|
* purposes since the protocol is not guaranteed to be understood by
|
||||||
|
* any existing URI processor.
|
||||||
|
*/
|
||||||
|
URI getLocator();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the locations of the children of this location. It is possible
|
||||||
|
* for a location to have both contents and children.
|
||||||
|
*/
|
||||||
|
PFPersistenceLocation[] getChildren();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the child of a particular simple name. This is a handle operation.
|
||||||
|
* The child does not need to exist to for this to produce a location.
|
||||||
|
* @param childName The name of the child.
|
||||||
|
* @return The child of that name.
|
||||||
|
*/
|
||||||
|
PFPersistenceLocation getChild(String childName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The simple name of this location, relative to its parent location.
|
||||||
|
*/
|
||||||
|
String getName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Keeps only those children from this location that are in the keep set.
|
||||||
|
* Typically used to clean renamed nodes from the tree on a save operation.
|
||||||
|
* @param keepSet The names of the children that should be kept. Others are discarded.
|
||||||
|
*/
|
||||||
|
void keepChildren(Set keepSet);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the contents of this location to a particular stream.
|
||||||
|
* Implementations must close this stream when finished.
|
||||||
|
* @param stream the stream from which to read the new contents of this location.
|
||||||
|
*/
|
||||||
|
void setContents(InputStream stream);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an open stream which can be read to retrieve the contents of this
|
||||||
|
* location. The client is responsible for closing this stream.
|
||||||
|
* @return a stream that will retrieve the contents of this location.
|
||||||
|
*/
|
||||||
|
InputStream getContents();
|
||||||
|
}
|
|
@ -0,0 +1,122 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2007 IBM Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.rse.internal.persistence;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.core.resources.IFolder;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.Path;
|
||||||
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.rse.core.RSECorePlugin;
|
||||||
|
import org.eclipse.rse.core.SystemResourceManager;
|
||||||
|
import org.eclipse.rse.internal.core.RSECoreMessages;
|
||||||
|
|
||||||
|
class PFWorkspaceAnchor implements PFPersistenceAnchor {
|
||||||
|
|
||||||
|
public String[] getProfileLocationNames() {
|
||||||
|
List names = new Vector(10);
|
||||||
|
IFolder providerFolder = getProviderFolder();
|
||||||
|
try {
|
||||||
|
IResource[] profileCandidates = providerFolder.members();
|
||||||
|
for (int i = 0; i < profileCandidates.length; i++) {
|
||||||
|
IResource profileCandidate = profileCandidates[i];
|
||||||
|
if (profileCandidate.getType() == IResource.FOLDER) {
|
||||||
|
String candidateName = profileCandidate.getName();
|
||||||
|
if (candidateName.startsWith(PFConstants.AB_PROFILE)) {
|
||||||
|
names.add(candidateName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (CoreException e) {
|
||||||
|
logException(e);
|
||||||
|
}
|
||||||
|
String[] result = new String[names.size()];
|
||||||
|
names.toArray(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IStatus deleteProfileLocation(String profileName, IProgressMonitor monitor) {
|
||||||
|
IStatus result = Status.OK_STATUS;
|
||||||
|
IFolder profileFolder = getProfileFolder(profileName);
|
||||||
|
if (profileFolder.exists()) {
|
||||||
|
try {
|
||||||
|
profileFolder.delete(IResource.FORCE, monitor);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
result = new Status(IStatus.ERROR, null, 0, RSECoreMessages.PropertyFileProvider_UnexpectedException, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PFPersistenceLocation getProfileLocation(String profileLocationName) {
|
||||||
|
IFolder profileFolder = getProfileFolder(profileLocationName);
|
||||||
|
PFPersistenceLocation result = new PFWorkspaceLocation(profileFolder);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the IFolder in which a profile is stored.
|
||||||
|
* @return The folder that was created or found.
|
||||||
|
*/
|
||||||
|
private IFolder getProfileFolder(String profileLocationName) {
|
||||||
|
IFolder providerFolder = getProviderFolder();
|
||||||
|
IFolder profileFolder = getFolder(providerFolder, profileLocationName);
|
||||||
|
return profileFolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the IFolder in which this persistence provider stores its profiles.
|
||||||
|
* This will create the folder if the folder was not found.
|
||||||
|
* @return The folder that was created or found.
|
||||||
|
*/
|
||||||
|
private IFolder getProviderFolder() {
|
||||||
|
IProject project = SystemResourceManager.getRemoteSystemsProject();
|
||||||
|
try {
|
||||||
|
project.refreshLocal(IResource.DEPTH_INFINITE, null);
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
IFolder providerFolder = getFolder(project, "dom.properties"); //$NON-NLS-1$
|
||||||
|
return providerFolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the specified folder of the parent container. If the folder does
|
||||||
|
* not exist it creates it.
|
||||||
|
* @param parent the parent container - typically a project or folder
|
||||||
|
* @param name the name of the folder to find or create
|
||||||
|
* @return the found or created folder
|
||||||
|
*/
|
||||||
|
private IFolder getFolder(IContainer parent, String name) {
|
||||||
|
IPath path = new Path(name);
|
||||||
|
IFolder folder = parent.getFolder(path);
|
||||||
|
if (!folder.exists()) {
|
||||||
|
try {
|
||||||
|
folder.create(IResource.NONE, true, null);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
logException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return folder;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void logException(Exception e) {
|
||||||
|
RSECorePlugin.getDefault().getLogger().logError("unexpected exception", e); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,141 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2007 IBM Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.rse.internal.persistence;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IFolder;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.Path;
|
||||||
|
import org.eclipse.rse.core.RSECorePlugin;
|
||||||
|
|
||||||
|
class PFWorkspaceLocation implements PFPersistenceLocation {
|
||||||
|
IFolder baseFolder = null;
|
||||||
|
|
||||||
|
public PFWorkspaceLocation(IFolder baseResource) {
|
||||||
|
this.baseFolder = baseResource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean exists() {
|
||||||
|
return baseFolder.exists();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ensure() {
|
||||||
|
if (!baseFolder.exists()) {
|
||||||
|
try {
|
||||||
|
baseFolder.create(true, true, null);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
logException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public PFPersistenceLocation getChild(String childName) {
|
||||||
|
IPath path = new Path(childName);
|
||||||
|
IFolder member = baseFolder.getFolder(path);
|
||||||
|
PFPersistenceLocation result = new PFWorkspaceLocation(member);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PFPersistenceLocation[] getChildren() {
|
||||||
|
IResource[] members;
|
||||||
|
try {
|
||||||
|
members = baseFolder.members();
|
||||||
|
} catch (CoreException e) {
|
||||||
|
logException(e);
|
||||||
|
members = new IResource[0];
|
||||||
|
}
|
||||||
|
List children = new ArrayList(members.length);
|
||||||
|
for (int i = 0; i < members.length; i++) {
|
||||||
|
IResource member = members[i];
|
||||||
|
if (member.getType() == IResource.FOLDER) {
|
||||||
|
PFPersistenceLocation child = new PFWorkspaceLocation((IFolder)member);
|
||||||
|
children.add(child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PFPersistenceLocation[] result = new PFPersistenceLocation[children.size()];
|
||||||
|
children.toArray(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public URI getLocator() {
|
||||||
|
return baseFolder.getLocationURI();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return baseFolder.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasContents() {
|
||||||
|
IPath propertiesFileName = new Path(PFConstants.PROPERTIES_FILE_NAME);
|
||||||
|
IFile propertiesFile = baseFolder.getFile(propertiesFileName);
|
||||||
|
boolean result = propertiesFile.exists();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void keepChildren(Set keepSet) {
|
||||||
|
try {
|
||||||
|
IResource[] children = baseFolder.members();
|
||||||
|
for (int i = 0; i < children.length; i++) {
|
||||||
|
IResource child = children[i];
|
||||||
|
if (child.getType() == IResource.FOLDER) {
|
||||||
|
String childFolderName = child.getName();
|
||||||
|
if (!keepSet.contains(childFolderName)) {
|
||||||
|
child.delete(true, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (CoreException e) {
|
||||||
|
logException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContents(InputStream stream) {
|
||||||
|
IPath propertiesFileName = new Path(PFConstants.PROPERTIES_FILE_NAME);
|
||||||
|
IFile propertiesFile = baseFolder.getFile(propertiesFileName);
|
||||||
|
try {
|
||||||
|
if (propertiesFile.exists()) {
|
||||||
|
propertiesFile.setContents(stream, IResource.FORCE | IResource.KEEP_HISTORY, null);
|
||||||
|
} else {
|
||||||
|
propertiesFile.create(stream, IResource.FORCE | IResource.KEEP_HISTORY, null);
|
||||||
|
}
|
||||||
|
} catch (CoreException e) {
|
||||||
|
logException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public InputStream getContents() {
|
||||||
|
InputStream result = null;
|
||||||
|
IPath propertiesFileName = new Path(PFConstants.PROPERTIES_FILE_NAME);
|
||||||
|
IFile propertiesFile = baseFolder.getFile(propertiesFileName);
|
||||||
|
if (propertiesFile.exists()) {
|
||||||
|
try {
|
||||||
|
result = propertiesFile.getContents();
|
||||||
|
} catch (CoreException e) {
|
||||||
|
logException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void logException(Exception e) {
|
||||||
|
RSECorePlugin.getDefault().getLogger().logError("unexpected exception", e); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -20,36 +20,22 @@ import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.net.URI;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
import java.util.Vector;
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IContainer;
|
|
||||||
import org.eclipse.core.resources.IFile;
|
|
||||||
import org.eclipse.core.resources.IFolder;
|
|
||||||
import org.eclipse.core.resources.IProject;
|
|
||||||
import org.eclipse.core.resources.IResource;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
|
||||||
import org.eclipse.core.runtime.IPath;
|
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Path;
|
|
||||||
import org.eclipse.core.runtime.Status;
|
|
||||||
import org.eclipse.core.runtime.jobs.Job;
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
import org.eclipse.rse.core.RSECorePlugin;
|
import org.eclipse.rse.core.RSECorePlugin;
|
||||||
import org.eclipse.rse.core.SystemResourceManager;
|
|
||||||
import org.eclipse.rse.internal.core.RSECoreMessages;
|
import org.eclipse.rse.internal.core.RSECoreMessages;
|
||||||
import org.eclipse.rse.logging.Logger;
|
import org.eclipse.rse.logging.Logger;
|
||||||
import org.eclipse.rse.persistence.IRSEPersistenceProvider;
|
import org.eclipse.rse.persistence.IRSEPersistenceProvider;
|
||||||
|
@ -65,35 +51,6 @@ import org.eclipse.rse.persistence.dom.RSEDOMNodeAttribute;
|
||||||
public class PropertyFileProvider implements IRSEPersistenceProvider {
|
public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
|
|
||||||
private static final String NULL_VALUE_STRING = "null"; //$NON-NLS-1$
|
private static final String NULL_VALUE_STRING = "null"; //$NON-NLS-1$
|
||||||
private static final String PROPERTIES_FILE_NAME = "node.properties"; //$NON-NLS-1$
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Metatype names
|
|
||||||
* each entry is an array. The first is the preferred name.
|
|
||||||
* The other names are acceptable alternates.
|
|
||||||
* Names must not contain periods or whitespace.
|
|
||||||
* Lowercase letters, numbers and dashes (-) are preferred.
|
|
||||||
*/
|
|
||||||
private static final String[] MT_ATTRIBUTE_TYPE = new String[] { "04-attr-type", "attr-type" }; //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
private static final String[] MT_ATTRIBUTE = new String[] { "03-attr", "attr" }; //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
private static final String[] MT_CHILD = new String[] { "06-child", "child" }; //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
private static final String[] MT_NODE_TYPE = new String[] { "01-type", "01-node-type", "n-type" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
|
||||||
private static final String[] MT_NODE_NAME = new String[] { "00-name", "00-node-name", "n-name" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
|
||||||
private static final String[] MT_REFERENCE = new String[] { "05-ref", "ref" }; //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
|
|
||||||
/* Type abbreviations */
|
|
||||||
private static final String AB_SUBSYSTEM = "SS"; //$NON-NLS-1$
|
|
||||||
private static final String AB_SERVICE_LAUNCHER = "SL"; //$NON-NLS-1$
|
|
||||||
private static final String AB_PROPERTY_SET = "PS"; //$NON-NLS-1$
|
|
||||||
private static final String AB_PROPERTY = "P"; //$NON-NLS-1$
|
|
||||||
private static final String AB_HOST = "H"; //$NON-NLS-1$
|
|
||||||
private static final String AB_FILTER_STRING = "FS"; //$NON-NLS-1$
|
|
||||||
private static final String AB_FILTER_POOL_REFERENCE = "FPR"; //$NON-NLS-1$
|
|
||||||
private static final String AB_FILTER_POOL = "FP"; //$NON-NLS-1$
|
|
||||||
private static final String AB_FILTER = "F"; //$NON-NLS-1$
|
|
||||||
private static final String AB_CONNECTOR_SERVICE = "CS"; //$NON-NLS-1$
|
|
||||||
private static final String AB_PROFILE = "PRF"; //$NON-NLS-1$
|
|
||||||
|
|
||||||
/* interesting character sets */
|
/* interesting character sets */
|
||||||
private static final String VALID = "abcdefghijklmnopqrstuvwxyz0123456789-._"; //$NON-NLS-1$
|
private static final String VALID = "abcdefghijklmnopqrstuvwxyz0123456789-._"; //$NON-NLS-1$
|
||||||
private static final String UPPER = "ABCDEFGHIJKLMNOPQRTSUVWXYZ"; //$NON-NLS-1$
|
private static final String UPPER = "ABCDEFGHIJKLMNOPQRTSUVWXYZ"; //$NON-NLS-1$
|
||||||
|
@ -106,252 +63,19 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
private static final String PV_LOCATION_METADATA = "metadata"; //$NON-NLS-1$
|
private static final String PV_LOCATION_METADATA = "metadata"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
|
||||||
interface PersistenceAnchor {
|
|
||||||
String[] getProfileLocationNames();
|
|
||||||
IStatus deleteProfileLocation(String profileName, IProgressMonitor monitor);
|
|
||||||
PersistenceLocation getProfileLocation(String profileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface PersistenceLocation {
|
|
||||||
boolean exists();
|
|
||||||
void ensure();
|
|
||||||
boolean hasContents();
|
|
||||||
URI getLocator();
|
|
||||||
PersistenceLocation[] getChildren();
|
|
||||||
PersistenceLocation getChild(String childName);
|
|
||||||
String getName();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keeps only those children from this location that are in the keep set.
|
|
||||||
* Typically used to clean renamed nodes from the tree on a save operation.
|
|
||||||
* @param keepSet The names of the children that should be kept. Others are discarded.
|
|
||||||
*/
|
|
||||||
void keepChildren(Set keepSet);
|
|
||||||
void setContents(InputStream stream);
|
|
||||||
InputStream getContents();
|
|
||||||
}
|
|
||||||
|
|
||||||
class WorkspaceAnchor implements PersistenceAnchor {
|
|
||||||
|
|
||||||
public String[] getProfileLocationNames() {
|
|
||||||
List names = new Vector(10);
|
|
||||||
IFolder providerFolder = getProviderFolder();
|
|
||||||
try {
|
|
||||||
IResource[] profileCandidates = providerFolder.members();
|
|
||||||
for (int i = 0; i < profileCandidates.length; i++) {
|
|
||||||
IResource profileCandidate = profileCandidates[i];
|
|
||||||
if (profileCandidate.getType() == IResource.FOLDER) {
|
|
||||||
String candidateName = profileCandidate.getName();
|
|
||||||
if (candidateName.startsWith(AB_PROFILE)) {
|
|
||||||
names.add(candidateName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (CoreException e) {
|
|
||||||
logException(e);
|
|
||||||
}
|
|
||||||
String[] result = new String[names.size()];
|
|
||||||
names.toArray(result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IStatus deleteProfileLocation(String profileName, IProgressMonitor monitor) {
|
|
||||||
IStatus result = Status.OK_STATUS;
|
|
||||||
IFolder profileFolder = getProfileFolder(profileName);
|
|
||||||
if (profileFolder.exists()) {
|
|
||||||
try {
|
|
||||||
profileFolder.delete(IResource.FORCE, monitor);
|
|
||||||
} catch (CoreException e) {
|
|
||||||
result = new Status(IStatus.ERROR, null, 0, RSECoreMessages.PropertyFileProvider_UnexpectedException, e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PersistenceLocation getProfileLocation(String profileLocationName) {
|
|
||||||
IFolder profileFolder = getProfileFolder(profileLocationName);
|
|
||||||
PersistenceLocation result = new WorkspaceLocation(profileFolder);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the IFolder in which a profile is stored.
|
|
||||||
* @return The folder that was created or found.
|
|
||||||
*/
|
|
||||||
private IFolder getProfileFolder(String profileLocationName) {
|
|
||||||
IFolder providerFolder = getProviderFolder();
|
|
||||||
IFolder profileFolder = getFolder(providerFolder, profileLocationName);
|
|
||||||
return profileFolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the IFolder in which this persistence provider stores its profiles.
|
|
||||||
* This will create the folder if the folder was not found.
|
|
||||||
* @return The folder that was created or found.
|
|
||||||
*/
|
|
||||||
private IFolder getProviderFolder() {
|
|
||||||
IProject project = SystemResourceManager.getRemoteSystemsProject();
|
|
||||||
try {
|
|
||||||
project.refreshLocal(IResource.DEPTH_INFINITE, null);
|
|
||||||
} catch (Exception e) {
|
|
||||||
}
|
|
||||||
IFolder providerFolder = getFolder(project, "dom.properties"); //$NON-NLS-1$
|
|
||||||
return providerFolder;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the specified folder of the parent container. If the folder does
|
|
||||||
* not exist it creates it.
|
|
||||||
* @param parent the parent container - typically a project or folder
|
|
||||||
* @param name the name of the folder to find or create
|
|
||||||
* @return the found or created folder
|
|
||||||
*/
|
|
||||||
private IFolder getFolder(IContainer parent, String name) {
|
|
||||||
IPath path = new Path(name);
|
|
||||||
IFolder folder = parent.getFolder(path);
|
|
||||||
if (!folder.exists()) {
|
|
||||||
try {
|
|
||||||
folder.create(IResource.NONE, true, null);
|
|
||||||
} catch (CoreException e) {
|
|
||||||
logException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return folder;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void logException(Exception e) {
|
|
||||||
RSECorePlugin.getDefault().getLogger().logError("unexpected exception", e); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class WorkspaceLocation implements PersistenceLocation {
|
|
||||||
IFolder baseFolder = null;
|
|
||||||
|
|
||||||
public WorkspaceLocation(IFolder baseResource) {
|
|
||||||
this.baseFolder = baseResource;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean exists() {
|
|
||||||
return baseFolder.exists();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ensure() {
|
|
||||||
if (!baseFolder.exists()) {
|
|
||||||
try {
|
|
||||||
baseFolder.create(true, true, null);
|
|
||||||
} catch (CoreException e) {
|
|
||||||
logException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public PersistenceLocation getChild(String childName) {
|
|
||||||
IPath path = new Path(childName);
|
|
||||||
IFolder member = baseFolder.getFolder(path);
|
|
||||||
PersistenceLocation result = new WorkspaceLocation(member);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PersistenceLocation[] getChildren() {
|
|
||||||
IResource[] members;
|
|
||||||
try {
|
|
||||||
members = baseFolder.members();
|
|
||||||
} catch (CoreException e) {
|
|
||||||
logException(e);
|
|
||||||
members = new IResource[0];
|
|
||||||
}
|
|
||||||
List children = new ArrayList(members.length);
|
|
||||||
for (int i = 0; i < members.length; i++) {
|
|
||||||
IResource member = members[i];
|
|
||||||
if (member.getType() == IResource.FOLDER) {
|
|
||||||
PersistenceLocation child = new WorkspaceLocation((IFolder)member);
|
|
||||||
children.add(child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PersistenceLocation[] result = new PersistenceLocation[children.size()];
|
|
||||||
children.toArray(result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public URI getLocator() {
|
|
||||||
return baseFolder.getLocationURI();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return baseFolder.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasContents() {
|
|
||||||
IPath propertiesFileName = new Path(PROPERTIES_FILE_NAME);
|
|
||||||
IFile propertiesFile = baseFolder.getFile(propertiesFileName);
|
|
||||||
boolean result = propertiesFile.exists();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void keepChildren(Set keepSet) {
|
|
||||||
try {
|
|
||||||
IResource[] children = baseFolder.members();
|
|
||||||
for (int i = 0; i < children.length; i++) {
|
|
||||||
IResource child = children[i];
|
|
||||||
if (child.getType() == IResource.FOLDER) {
|
|
||||||
String childFolderName = child.getName();
|
|
||||||
if (!keepSet.contains(childFolderName)) {
|
|
||||||
child.delete(true, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (CoreException e) {
|
|
||||||
logException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setContents(InputStream stream) {
|
|
||||||
IPath propertiesFileName = new Path(PROPERTIES_FILE_NAME);
|
|
||||||
IFile propertiesFile = baseFolder.getFile(propertiesFileName);
|
|
||||||
try {
|
|
||||||
if (propertiesFile.exists()) {
|
|
||||||
propertiesFile.setContents(stream, IResource.FORCE | IResource.KEEP_HISTORY, null);
|
|
||||||
} else {
|
|
||||||
propertiesFile.create(stream, IResource.FORCE | IResource.KEEP_HISTORY, null);
|
|
||||||
}
|
|
||||||
} catch (CoreException e) {
|
|
||||||
logException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public InputStream getContents() {
|
|
||||||
InputStream result = null;
|
|
||||||
IPath propertiesFileName = new Path(PROPERTIES_FILE_NAME);
|
|
||||||
IFile propertiesFile = baseFolder.getFile(propertiesFileName);
|
|
||||||
if (propertiesFile.exists()) {
|
|
||||||
try {
|
|
||||||
result = propertiesFile.getContents();
|
|
||||||
} catch (CoreException e) {
|
|
||||||
logException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void logException(Exception e) {
|
|
||||||
RSECorePlugin.getDefault().getLogger().logError("unexpected exception", e); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private Pattern period = Pattern.compile("\\."); //$NON-NLS-1$
|
private Pattern period = Pattern.compile("\\."); //$NON-NLS-1$
|
||||||
private Pattern suffixPattern = Pattern.compile("_(\\d+)$"); //$NON-NLS-1$
|
private Pattern suffixPattern = Pattern.compile("_(\\d+)$"); //$NON-NLS-1$
|
||||||
private Pattern unicodePattern = Pattern.compile("#(\\p{XDigit}+)#"); //$NON-NLS-1$
|
private Pattern unicodePattern = Pattern.compile("#(\\p{XDigit}+)#"); //$NON-NLS-1$
|
||||||
private Map typeQualifiers = getTypeQualifiers();
|
private Map typeQualifiers = getTypeQualifiers();
|
||||||
private Map saveJobs = new HashMap();
|
private Map saveJobs = new HashMap();
|
||||||
private PersistenceAnchor anchor = new WorkspaceAnchor();
|
private PFPersistenceAnchor anchor = null;
|
||||||
private Properties properties = null;
|
private Properties properties = null;
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.rse.persistence.IRSEPersistenceProvider#getSavedProfileNames()
|
* @see org.eclipse.rse.persistence.IRSEPersistenceProvider#getSavedProfileNames()
|
||||||
*/
|
*/
|
||||||
public String[] getSavedProfileNames() {
|
public String[] getSavedProfileNames() {
|
||||||
String[] locationNames = anchor.getProfileLocationNames();
|
String[] locationNames = getAnchor().getProfileLocationNames();
|
||||||
String[] result = new String[locationNames.length];
|
String[] result = new String[locationNames.length];
|
||||||
for (int i = 0; i < locationNames.length; i++) {
|
for (int i = 0; i < locationNames.length; i++) {
|
||||||
String locationName = locationNames[i];
|
String locationName = locationNames[i];
|
||||||
|
@ -365,8 +89,8 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
* @see org.eclipse.rse.persistence.IRSEPersistenceProvider#deleteProfile(java.lang.String, org.eclipse.core.runtime.IProgressMonitor)
|
* @see org.eclipse.rse.persistence.IRSEPersistenceProvider#deleteProfile(java.lang.String, org.eclipse.core.runtime.IProgressMonitor)
|
||||||
*/
|
*/
|
||||||
public IStatus deleteProfile(String profileName, IProgressMonitor monitor) {
|
public IStatus deleteProfile(String profileName, IProgressMonitor monitor) {
|
||||||
String profileLocationName = getLocationName(AB_PROFILE, profileName);
|
String profileLocationName = getLocationName(PFConstants.AB_PROFILE, profileName);
|
||||||
IStatus result = anchor.deleteProfileLocation(profileLocationName, monitor);
|
IStatus result = getAnchor().deleteProfileLocation(profileLocationName, monitor);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,7 +101,7 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
synchronized (dom) {
|
synchronized (dom) {
|
||||||
String profileLocationName = getLocationName(dom);
|
String profileLocationName = getLocationName(dom);
|
||||||
PersistenceLocation profileLocation = anchor.getProfileLocation(profileLocationName);
|
PFPersistenceLocation profileLocation = getAnchor().getProfileLocation(profileLocationName);
|
||||||
try {
|
try {
|
||||||
int n = countNodes(dom);
|
int n = countNodes(dom);
|
||||||
monitor.beginTask(RSECoreMessages.PropertyFileProvider_SavingTaskName, n);
|
monitor.beginTask(RSECoreMessages.PropertyFileProvider_SavingTaskName, n);
|
||||||
|
@ -397,8 +121,8 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
*/
|
*/
|
||||||
public RSEDOM loadRSEDOM(String profileName, IProgressMonitor monitor) {
|
public RSEDOM loadRSEDOM(String profileName, IProgressMonitor monitor) {
|
||||||
RSEDOM dom = null;
|
RSEDOM dom = null;
|
||||||
String profileLocationName = getLocationName(AB_PROFILE, profileName);
|
String profileLocationName = getLocationName(PFConstants.AB_PROFILE, profileName);
|
||||||
PersistenceLocation location = anchor.getProfileLocation(profileLocationName);
|
PFPersistenceLocation location = getAnchor().getProfileLocation(profileLocationName);
|
||||||
if (location.exists()) {
|
if (location.exists()) {
|
||||||
int n = countLocations(location);
|
int n = countLocations(location);
|
||||||
monitor.beginTask(RSECoreMessages.PropertyFileProvider_LoadingTaskName, n);
|
monitor.beginTask(RSECoreMessages.PropertyFileProvider_LoadingTaskName, n);
|
||||||
|
@ -439,6 +163,20 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private PFPersistenceAnchor getAnchor() {
|
||||||
|
if (anchor == null) {
|
||||||
|
String location = properties.getProperty(P_LOCATION);
|
||||||
|
if (location.equals(PV_LOCATION_WORKSPACE)) {
|
||||||
|
anchor = new PFWorkspaceAnchor();
|
||||||
|
} else if (location.equals(PV_LOCATION_METADATA)) {
|
||||||
|
anchor = new PFMetadataAnchor();
|
||||||
|
} else {
|
||||||
|
anchor = new PFMetadataAnchor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return anchor;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Saves a node from the DOM to the file system.
|
* Saves a node from the DOM to the file system.
|
||||||
|
@ -447,7 +185,7 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
* @param monitor The progress monitor. If the monitor has been cancel then
|
* @param monitor The progress monitor. If the monitor has been cancel then
|
||||||
* this method will do nothing and return null.
|
* this method will do nothing and return null.
|
||||||
*/
|
*/
|
||||||
private void saveNode(RSEDOMNode node, PersistenceLocation location, IProgressMonitor monitor) {
|
private void saveNode(RSEDOMNode node, PFPersistenceLocation location, IProgressMonitor monitor) {
|
||||||
if (monitor.isCanceled()) return;
|
if (monitor.isCanceled()) return;
|
||||||
location.ensure();
|
location.ensure();
|
||||||
Properties properties = getProperties(node, false, monitor);
|
Properties properties = getProperties(node, false, monitor);
|
||||||
|
@ -457,9 +195,9 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
RSEDOMNode childNode = childNodes[i];
|
RSEDOMNode childNode = childNodes[i];
|
||||||
String index = getIndexString(i);
|
String index = getIndexString(i);
|
||||||
if (!isNodeEmbedded(childNode)) {
|
if (!isNodeEmbedded(childNode)) {
|
||||||
String key = combine(MT_REFERENCE[0], index);
|
String key = combine(PFConstants.MT_REFERENCE[0], index);
|
||||||
String childName = getLocationName(childNode);
|
String childName = getLocationName(childNode);
|
||||||
PersistenceLocation childLocation = location.getChild(childName);
|
PFPersistenceLocation childLocation = location.getChild(childName);
|
||||||
saveNode(childNode, childLocation, monitor);
|
saveNode(childNode, childLocation, monitor);
|
||||||
properties.put(key, childName);
|
properties.put(key, childName);
|
||||||
childNames.add(childName);
|
childNames.add(childName);
|
||||||
|
@ -613,17 +351,17 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
|
|
||||||
private Map getTypeQualifiers() {
|
private Map getTypeQualifiers() {
|
||||||
Map typeQualifiers = new HashMap();
|
Map typeQualifiers = new HashMap();
|
||||||
typeQualifiers.put(IRSEDOMConstants.TYPE_CONNECTOR_SERVICE, AB_CONNECTOR_SERVICE);
|
typeQualifiers.put(IRSEDOMConstants.TYPE_CONNECTOR_SERVICE, PFConstants.AB_CONNECTOR_SERVICE);
|
||||||
typeQualifiers.put(IRSEDOMConstants.TYPE_FILTER, AB_FILTER);
|
typeQualifiers.put(IRSEDOMConstants.TYPE_FILTER, PFConstants.AB_FILTER);
|
||||||
typeQualifiers.put(IRSEDOMConstants.TYPE_FILTER_POOL, AB_FILTER_POOL);
|
typeQualifiers.put(IRSEDOMConstants.TYPE_FILTER_POOL, PFConstants.AB_FILTER_POOL);
|
||||||
typeQualifiers.put(IRSEDOMConstants.TYPE_FILTER_POOL_REFERENCE, AB_FILTER_POOL_REFERENCE);
|
typeQualifiers.put(IRSEDOMConstants.TYPE_FILTER_POOL_REFERENCE, PFConstants.AB_FILTER_POOL_REFERENCE);
|
||||||
typeQualifiers.put(IRSEDOMConstants.TYPE_FILTER_STRING, AB_FILTER_STRING);
|
typeQualifiers.put(IRSEDOMConstants.TYPE_FILTER_STRING, PFConstants.AB_FILTER_STRING);
|
||||||
typeQualifiers.put(IRSEDOMConstants.TYPE_HOST, AB_HOST);
|
typeQualifiers.put(IRSEDOMConstants.TYPE_HOST, PFConstants.AB_HOST);
|
||||||
typeQualifiers.put(IRSEDOMConstants.TYPE_PROFILE, AB_PROFILE);
|
typeQualifiers.put(IRSEDOMConstants.TYPE_PROFILE, PFConstants.AB_PROFILE);
|
||||||
typeQualifiers.put(IRSEDOMConstants.TYPE_PROPERTY, AB_PROPERTY);
|
typeQualifiers.put(IRSEDOMConstants.TYPE_PROPERTY, PFConstants.AB_PROPERTY);
|
||||||
typeQualifiers.put(IRSEDOMConstants.TYPE_PROPERTY_SET, AB_PROPERTY_SET);
|
typeQualifiers.put(IRSEDOMConstants.TYPE_PROPERTY_SET, PFConstants.AB_PROPERTY_SET);
|
||||||
typeQualifiers.put(IRSEDOMConstants.TYPE_SERVER_LAUNCHER, AB_SERVICE_LAUNCHER);
|
typeQualifiers.put(IRSEDOMConstants.TYPE_SERVER_LAUNCHER, PFConstants.AB_SERVICE_LAUNCHER);
|
||||||
typeQualifiers.put(IRSEDOMConstants.TYPE_SUBSYSTEM, AB_SUBSYSTEM);
|
typeQualifiers.put(IRSEDOMConstants.TYPE_SUBSYSTEM, PFConstants.AB_SUBSYSTEM);
|
||||||
return typeQualifiers;
|
return typeQualifiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -634,7 +372,7 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
* @param location The PersistenceLocation which will contain the properties.
|
* @param location The PersistenceLocation which will contain the properties.
|
||||||
* @param monitor The progress monitor.
|
* @param monitor The progress monitor.
|
||||||
*/
|
*/
|
||||||
private void writeProperties(Properties properties, String header, PersistenceLocation location) {
|
private void writeProperties(Properties properties, String header, PFPersistenceLocation location) {
|
||||||
ByteArrayOutputStream outStream = new ByteArrayOutputStream(500);
|
ByteArrayOutputStream outStream = new ByteArrayOutputStream(500);
|
||||||
PrintWriter out = new PrintWriter(outStream);
|
PrintWriter out = new PrintWriter(outStream);
|
||||||
out.println("# " + header); //$NON-NLS-1$
|
out.println("# " + header); //$NON-NLS-1$
|
||||||
|
@ -739,15 +477,15 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
*/
|
*/
|
||||||
private Properties getProperties(RSEDOMNode node, boolean force, IProgressMonitor monitor) {
|
private Properties getProperties(RSEDOMNode node, boolean force, IProgressMonitor monitor) {
|
||||||
Properties properties = new Properties();
|
Properties properties = new Properties();
|
||||||
properties.put(MT_NODE_NAME[0], node.getName());
|
properties.put(PFConstants.MT_NODE_NAME[0], node.getName());
|
||||||
properties.put(MT_NODE_TYPE[0], node.getType());
|
properties.put(PFConstants.MT_NODE_TYPE[0], node.getType());
|
||||||
properties.putAll(getAttributes(node));
|
properties.putAll(getAttributes(node));
|
||||||
RSEDOMNode[] children = node.getChildren();
|
RSEDOMNode[] children = node.getChildren();
|
||||||
for (int i = 0; i < children.length; i++) {
|
for (int i = 0; i < children.length; i++) {
|
||||||
RSEDOMNode child = children[i];
|
RSEDOMNode child = children[i];
|
||||||
String index = getIndexString(i);
|
String index = getIndexString(i);
|
||||||
if (force || isNodeEmbedded(child)) {
|
if (force || isNodeEmbedded(child)) {
|
||||||
String prefix = combine(MT_CHILD[0], index);
|
String prefix = combine(PFConstants.MT_CHILD[0], index);
|
||||||
Properties childProperties = getProperties(child, true, monitor);
|
Properties childProperties = getProperties(child, true, monitor);
|
||||||
Enumeration e = childProperties.keys();
|
Enumeration e = childProperties.keys();
|
||||||
while (e.hasMoreElements()) {
|
while (e.hasMoreElements()) {
|
||||||
|
@ -776,11 +514,11 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
for (int i = 0; i < attributes.length; i++) {
|
for (int i = 0; i < attributes.length; i++) {
|
||||||
RSEDOMNodeAttribute attribute = attributes[i];
|
RSEDOMNodeAttribute attribute = attributes[i];
|
||||||
String attributeName = attribute.getKey();
|
String attributeName = attribute.getKey();
|
||||||
String propertyKey = combine(MT_ATTRIBUTE[0], attributeName);
|
String propertyKey = combine(PFConstants.MT_ATTRIBUTE[0], attributeName);
|
||||||
properties.put(propertyKey, fixValue(attribute.getValue()));
|
properties.put(propertyKey, fixValue(attribute.getValue()));
|
||||||
String attributeType = attribute.getType();
|
String attributeType = attribute.getType();
|
||||||
if (attributeType != null) {
|
if (attributeType != null) {
|
||||||
propertyKey = combine(MT_ATTRIBUTE_TYPE[0], attributeName);
|
propertyKey = combine(PFConstants.MT_ATTRIBUTE_TYPE[0], attributeName);
|
||||||
properties.put(propertyKey, attributeType);
|
properties.put(propertyKey, attributeType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -810,14 +548,14 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
* @param location
|
* @param location
|
||||||
* @return the number of locations that have contents.
|
* @return the number of locations that have contents.
|
||||||
*/
|
*/
|
||||||
private int countLocations(PersistenceLocation location) {
|
private int countLocations(PFPersistenceLocation location) {
|
||||||
int result = 0;
|
int result = 0;
|
||||||
if (location.hasContents()) {
|
if (location.hasContents()) {
|
||||||
result += 1;
|
result += 1;
|
||||||
}
|
}
|
||||||
PersistenceLocation[] children = location.getChildren();
|
PFPersistenceLocation[] children = location.getChildren();
|
||||||
for (int i = 0; i < children.length; i++) {
|
for (int i = 0; i < children.length; i++) {
|
||||||
PersistenceLocation child = children[i];
|
PFPersistenceLocation child = children[i];
|
||||||
result += countLocations(child);
|
result += countLocations(child);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -833,7 +571,7 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
* is not canceled then its work count is incremented by one.
|
* is not canceled then its work count is incremented by one.
|
||||||
* @return The newly loaded node.
|
* @return The newly loaded node.
|
||||||
*/
|
*/
|
||||||
private RSEDOMNode loadNode(RSEDOMNode parent, PersistenceLocation nodeLocation, IProgressMonitor monitor) {
|
private RSEDOMNode loadNode(RSEDOMNode parent, PFPersistenceLocation nodeLocation, IProgressMonitor monitor) {
|
||||||
RSEDOMNode node = null;
|
RSEDOMNode node = null;
|
||||||
if (!monitor.isCanceled()) {
|
if (!monitor.isCanceled()) {
|
||||||
Properties properties = loadProperties(nodeLocation);
|
Properties properties = loadProperties(nodeLocation);
|
||||||
|
@ -851,7 +589,7 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
* @param location The location in which to look for properties.
|
* @param location The location in which to look for properties.
|
||||||
* @return The Properties object.
|
* @return The Properties object.
|
||||||
*/
|
*/
|
||||||
private Properties loadProperties(PersistenceLocation location) {
|
private Properties loadProperties(PFPersistenceLocation location) {
|
||||||
Properties properties = null;
|
Properties properties = null;
|
||||||
if (location.hasContents()) {
|
if (location.hasContents()) {
|
||||||
properties = new Properties();
|
properties = new Properties();
|
||||||
|
@ -872,12 +610,12 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
* @param parent The parent node of the node to be created.
|
* @param parent The parent node of the node to be created.
|
||||||
* @param location The location in which referenced child folders can be found.
|
* @param location The location in which referenced child folders can be found.
|
||||||
* @param properties The properties from which to create the node.
|
* @param properties The properties from which to create the node.
|
||||||
* @param monitor a monitor to support cancelation and progress reporting.
|
* @param monitor a monitor to support cancellation and progress reporting.
|
||||||
* @return the newly created DOM node and its children.
|
* @return the newly created DOM node and its children.
|
||||||
*/
|
*/
|
||||||
private RSEDOMNode makeNode(RSEDOMNode parent, PersistenceLocation location, Properties properties, IProgressMonitor monitor) {
|
private RSEDOMNode makeNode(RSEDOMNode parent, PFPersistenceLocation location, Properties properties, IProgressMonitor monitor) {
|
||||||
String nodeType = getProperty(properties, MT_NODE_TYPE);
|
String nodeType = getProperty(properties, PFConstants.MT_NODE_TYPE);
|
||||||
String nodeName = getProperty(properties, MT_NODE_NAME);
|
String nodeName = getProperty(properties, PFConstants.MT_NODE_NAME);
|
||||||
RSEDOMNode node = (parent == null) ? new RSEDOM(nodeName) : new RSEDOMNode(parent, nodeType, nodeName);
|
RSEDOMNode node = (parent == null) ? new RSEDOM(nodeName) : new RSEDOMNode(parent, nodeType, nodeName);
|
||||||
node.setRestoring(true);
|
node.setRestoring(true);
|
||||||
Set keys = properties.keySet();
|
Set keys = properties.keySet();
|
||||||
|
@ -891,15 +629,15 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
String key = (String) z.next();
|
String key = (String) z.next();
|
||||||
String[] words = split(key, 2);
|
String[] words = split(key, 2);
|
||||||
String metatype = words[0];
|
String metatype = words[0];
|
||||||
if (find(metatype, MT_ATTRIBUTE)) {
|
if (find(metatype, PFConstants.MT_ATTRIBUTE)) {
|
||||||
String value = properties.getProperty(key);
|
String value = properties.getProperty(key);
|
||||||
attributes.put(words[1], value);
|
attributes.put(words[1], value);
|
||||||
} else if (find(metatype, MT_ATTRIBUTE_TYPE)) {
|
} else if (find(metatype, PFConstants.MT_ATTRIBUTE_TYPE)) {
|
||||||
String type = properties.getProperty(key);
|
String type = properties.getProperty(key);
|
||||||
attributeTypes.put(words[1], type);
|
attributeTypes.put(words[1], type);
|
||||||
} else if (find(metatype, MT_REFERENCE)) {
|
} else if (find(metatype, PFConstants.MT_REFERENCE)) {
|
||||||
referenceKeys.add(key);
|
referenceKeys.add(key);
|
||||||
} else if (find(metatype, MT_CHILD)) {
|
} else if (find(metatype, PFConstants.MT_CHILD)) {
|
||||||
String value = properties.getProperty(key);
|
String value = properties.getProperty(key);
|
||||||
words = split(words[1], 2);
|
words = split(words[1], 2);
|
||||||
String childName = words[0];
|
String childName = words[0];
|
||||||
|
@ -925,7 +663,7 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
for (Iterator z = referenceKeys.iterator(); z.hasNext();) {
|
for (Iterator z = referenceKeys.iterator(); z.hasNext();) {
|
||||||
String key = (String) z.next();
|
String key = (String) z.next();
|
||||||
String childLocationName = properties.getProperty(key);
|
String childLocationName = properties.getProperty(key);
|
||||||
PersistenceLocation childLocation = location.getChild(childLocationName);
|
PFPersistenceLocation childLocation = location.getChild(childLocationName);
|
||||||
loadNode(node, childLocation, monitor);
|
loadNode(node, childLocation, monitor);
|
||||||
}
|
}
|
||||||
node.setRestoring(false);
|
node.setRestoring(false);
|
||||||
|
@ -1026,4 +764,4 @@ public class PropertyFileProvider implements IRSEPersistenceProvider {
|
||||||
getLogger().logError("unexpected exception", e); //$NON-NLS-1$
|
getLogger().logError("unexpected exception", e); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue