diff --git a/rse/plugins/org.eclipse.rse.ui/filters/org/eclipse/rse/filters/SystemFilterPoolReferenceManager.java b/rse/plugins/org.eclipse.rse.ui/filters/org/eclipse/rse/filters/SystemFilterPoolReferenceManager.java index 37e05073012..c9303ddd7dc 100644 --- a/rse/plugins/org.eclipse.rse.ui/filters/org/eclipse/rse/filters/SystemFilterPoolReferenceManager.java +++ b/rse/plugins/org.eclipse.rse.ui/filters/org/eclipse/rse/filters/SystemFilterPoolReferenceManager.java @@ -15,6 +15,7 @@ ********************************************************************************/ package org.eclipse.rse.filters; + import java.util.Vector; import org.eclipse.core.resources.IFile; @@ -38,7 +39,6 @@ import org.eclipse.rse.internal.filters.SystemFilter; import org.eclipse.rse.internal.filters.SystemFilterPoolReference; import org.eclipse.rse.internal.references.SystemPersistableReferenceManager; - /** * This class manages a persistable list of objects each of which reference * a filter pool. This class builds on the parent class SystemPersistableReferenceManager, @@ -48,10 +48,9 @@ import org.eclipse.rse.internal.references.SystemPersistableReferenceManager; /** * @lastgen class SystemFilterPoolReferenceManagerImpl extends SystemPersistableReferenceManagerImpl implements SystemFilterPoolReferenceManager, SystemPersistableReferenceManager {} */ -public class SystemFilterPoolReferenceManager extends SystemPersistableReferenceManager implements ISystemFilterPoolReferenceManager -{ +public class SystemFilterPoolReferenceManager extends SystemPersistableReferenceManager implements ISystemFilterPoolReferenceManager { //private SystemFilterPoolManager[] poolMgrs = null; - private ISystemFilterPoolManagerProvider poolMgrProvider = null; + private ISystemFilterPoolManagerProvider poolMgrProvider = null; private ISystemFilterPoolManager defaultPoolMgr = null; private ISystemFilterPoolReferenceManagerProvider caller = null; private IRSEFilterNamingPolicy namingPolicy = null; @@ -65,365 +64,313 @@ public class SystemFilterPoolReferenceManager extends SystemPersistableReference private ISystemFilterPoolReference[] fpRefsArray = null; private static final ISystemFilterPoolReference[] emptyFilterPoolRefArray = new ISystemFilterPoolReference[0]; -/** + /** * Default constructor. Typically called by MOF factory methods. */ - public SystemFilterPoolReferenceManager() - { + public SystemFilterPoolReferenceManager() { super(); } + /** - * Create a SystemFilterPoolReferenceManager instance. - * @param caller Objects which instantiate this class should implement the - * SystemFilterPoolReferenceManagerProvider interface, and pass "this" for this parameter. - * Given any filter framework object, it is possible to retrieve the caller's - * object via the getProvider method call. - * @param relatedPoolManagers The managers that owns the master list of filter pools that - * this manager will contain references to. - * @param mgrFolder the folder that will hold the persisted file. This is used when - * the save policy is SAVE_POLICY_ONE_FILE_PER_MANAGER. For SAVE_POLICY_NONE, this - * is not used. If it is used, it is created if it does not already exist. - * @param name the name of the filter pool reference manager. This is used when - * the save policy is SAVE_POLICY_ONE_FILE_PER_MANAGER, to deduce the file name. - * @param savePolicy The save policy for the filter pool references list. One of the - * following from the {@link org.eclipse.rse.core.filters.ISystemFilterConstants SystemFilterConstants} - * interface: - *
- *
- * Calls back to inform provider
- * @param filterPoolRefs Array of SystemFilterPoolReferences to move.
- * @param newPosition new zero-based position for the filter pool references.
- */
- public void moveSystemFilterPoolReferences(ISystemFilterPoolReference[] filterPoolRefs, int delta)
- {
- int[] oldPositions = new int[filterPoolRefs.length];
- noEvents = noSave = true;
- for (int idx=0; idx
+ * Calls back to inform provider
+ * @param filterPoolRefs Array of SystemFilterPoolReferences to move.
+ * @param newPosition new zero-based position for the filter pool references.
+ */
+ public void moveSystemFilterPoolReferences(ISystemFilterPoolReference[] filterPoolRefs, int delta) {
+ int[] oldPositions = new int[filterPoolRefs.length];
+ noEvents = noSave = true;
+ for (int idx = 0; idx < filterPoolRefs.length; idx++)
+ oldPositions[idx] = getSystemFilterPoolReferencePosition(filterPoolRefs[idx]);
+ if (delta > 0) // moving down, process backwards
+ for (int idx = filterPoolRefs.length - 1; idx >= 0; idx--)
+ moveSystemFilterPoolReference(filterPoolRefs[idx], oldPositions[idx] + delta);
+ else
+ for (int idx = 0; idx < filterPoolRefs.length; idx++)
+ moveSystemFilterPoolReference(filterPoolRefs[idx], oldPositions[idx] + delta);
+ invalidateFilterPoolReferencesCache();
+ noEvents = noSave = false;
+ quietSave();
+ if (fireEvents && (caller != null)) caller.filterEventFilterPoolReferencesRePositioned(filterPoolRefs, delta);
+ }
- // ----------------------------------------------
- // Methods that work on FilterPool master objects
- // ----------------------------------------------
- /**
- * Return array of filter pools currently referenced by this manager
+ // ----------------------------------------------
+ // Methods that work on FilterPool master objects
+ // ----------------------------------------------
+ /**
+ * Return array of filter pools currently referenced by this manager
* Result will never be null, although it may be an array of length zero.
- */
- public ISystemFilterPool[] getReferencedSystemFilterPools()
- {
- ISystemFilterPoolReference[] refs = getSystemFilterPoolReferences();
- ISystemFilterPool[] pools = new ISystemFilterPool[refs.length];
- for (int idx=0; idx
- * @param mgrs The list of filter pool managers to scan for the given name
- * @param mgrName The name of the manager to restrict the search to
- */
- public static ISystemFilterPoolManager getFilterPoolManager(ISystemFilterPoolManager[] mgrs, String mgrName)
- {
- ISystemFilterPoolManager mgr = null;
- for (int idx=0; (mgr==null)&&(idx
+ * @param mgrs The list of filter pool managers to scan for the given filter pool.
+ * @param mgrName The name of the manager to restrict the search to
+ * @param poolReferenceName The name of the filter pool as stored on disk. It may be qualified somehow
+ * to incorporate the manager name too.
+ */
+ public static ISystemFilterPool getFilterPool(ISystemFilterPoolManager[] mgrs, String mgrName, String poolName) {
+ ISystemFilterPoolManager mgr = getFilterPoolManager(mgrs, mgrName);
+ if (mgr == null) return null;
+ return mgr.getSystemFilterPool(poolName);
+ }
- /**
- * Return the path of the folder
- */
- public String getFolderPath()
- {
- return getResourceHelpers().getFolderPath(mgrFolder);
- }
- /**
- * Return the path of the given folder
- */
- public static String getFolderPath(IFolder folder)
- {
- return SystemResourceHelpers.getResourceHelpers().getFolderPath(folder);
- }
+ /**
+ * Utility method to scan across all filter pool managers for a match on a give name.
+ *
+ * @param mgrs The list of filter pool managers to scan for the given name
+ * @param mgrName The name of the manager to restrict the search to
+ */
+ public static ISystemFilterPoolManager getFilterPoolManager(ISystemFilterPoolManager[] mgrs, String mgrName) {
+ ISystemFilterPoolManager mgr = null;
+ for (int idx = 0; (mgr == null) && (idx < mgrs.length); idx++)
+ if (mgrs[idx].getName().equals(mgrName)) mgr = mgrs[idx];
+ return mgr;
+ }
- /*
- * To reduce typing...
- */
- private SystemResourceHelpers getResourceHelpers()
- {
- return SystemResourceHelpers.getResourceHelpers();
- }
+ // ------------------
+ // HELPER METHODS...
+ // ------------------
+ /**
+ * If saving all info in one file, this returns the fully qualified name of that file,
+ * given the unadorned manager name and the prefix (if any) to adorn with.
+ */
+ protected static String getSaveFilePathAndName(IFolder mgrFolder, String name, IRSEFilterNamingPolicy namingPolicy) {
+ return SystemFilter.addPathTerminator(getFolderPath(mgrFolder)) + getSaveFileName(namingPolicy.getReferenceManagerSaveFileName(name));
+ }
+ /**
+ * Derive and return the unqualified file name used to store this to disk.
+ * It is unqualified.
+ */
+ protected static String getSaveFileName(String fileNameNoSuffix) {
+ return fileNameNoSuffix + ISystemFilterConstants.SAVEFILE_SUFFIX;
+ }
+ /**
+ * non-static version.
+ */
+ protected String getSaveFilePathAndName() {
+ return SystemFilter.addPathTerminator(getFolderPath(mgrFolder)) + getSaveFileName();
+ }
+ /**
+ * non-static version.
+ */
+ protected String getSaveFileName() {
+ return getSaveFileName(namingPolicy.getReferenceManagerSaveFileName(getName()));
+ }
+ /**
+ * Return the folder that this manager is contained in.
+ */
+ public IFolder getFolder() {
+ return mgrFolder;
+ }
- public String toString()
- {
- return getName();
- }
+ /**
+ * Reset the folder that this manager is contained in.
+ */
+ public void resetManagerFolder(IFolder newFolder) {
+ mgrFolder = newFolder;
+ }
+
+ /**
+ * Return the path of the folder
+ */
+ public String getFolderPath() {
+ return getResourceHelpers().getFolderPath(mgrFolder);
+ }
+
+ /**
+ * Return the path of the given folder
+ */
+ public static String getFolderPath(IFolder folder) {
+ return SystemResourceHelpers.getResourceHelpers().getFolderPath(folder);
+ }
+
+ /*
+ * To reduce typing...
+ */
+ private SystemResourceHelpers getResourceHelpers() {
+ return SystemResourceHelpers.getResourceHelpers();
+ }
+
+ public String toString() {
+ return getName();
+ }
}
\ No newline at end of file
- *
- * @param relatedManagers the filter pool managers that hold filter pools we reference
- * @param provider the host of this reference manager, so you can later call getProvider
- * @return A Vector of SystemFilterPoolReferences that were not successfully resolved, or null if all
- * were resolved.
- */
- public Vector resolveReferencesAfterRestore(ISystemFilterPoolManagerProvider relatedPoolMgrProvider,
- ISystemFilterPoolReferenceManagerProvider provider)
- {
- setSystemFilterPoolManagerProvider(relatedPoolMgrProvider); // sets poolMgrs = relatedManagers
- setProvider(provider);
- ISystemFilterPoolManager[] relatedManagers = getSystemFilterPoolManagers();
- if (relatedManagers != null)
- {
- Vector badRefs = new Vector();
- ISystemFilterPoolReference[] poolRefs = getSystemFilterPoolReferences();
- if (poolRefs != null)
- {
- for (int idx=0; idx
+ *
+ * @param relatedManagers the filter pool managers that hold filter pools we reference
+ * @param provider the host of this reference manager, so you can later call getProvider
+ * @return A Vector of SystemFilterPoolReferences that were not successfully resolved, or null if all
+ * were resolved.
+ */
+ public Vector resolveReferencesAfterRestore(ISystemFilterPoolManagerProvider relatedPoolMgrProvider, ISystemFilterPoolReferenceManagerProvider provider) {
+ setSystemFilterPoolManagerProvider(relatedPoolMgrProvider); // sets poolMgrs = relatedManagers
+ setProvider(provider);
+ ISystemFilterPoolManager[] relatedManagers = getSystemFilterPoolManagers();
+ if (relatedManagers != null) {
+ Vector badRefs = new Vector();
+ ISystemFilterPoolReference[] poolRefs = getSystemFilterPoolReferences();
+ if (poolRefs != null) {
+ for (int idx = 0; idx < poolRefs.length; idx++) {
+ String poolName = poolRefs[idx].getReferencedFilterPoolName();
+ String mgrName = poolRefs[idx].getReferencedFilterPoolManagerName();
+ ISystemFilterPool refdPool = getFilterPool(relatedManagers, mgrName, poolName);
+ if ((refdPool == null) && (getFilterPoolManager(relatedManagers, mgrName) == null)) {
+ //System.out.println("...looking for broken reference for "+mgrName+"."+poolName);
+ refdPool = relatedPoolMgrProvider.getSystemFilterPoolForBrokenReference(this, mgrName, poolName);
+ }
- /**
- * If saving all info in one file, this returns the fully qualified name of that file,
- * given the unadorned manager name and the prefix (if any) to adorn with.
- */
- protected static String getSaveFilePathAndName(IFolder mgrFolder, String name, IRSEFilterNamingPolicy namingPolicy)
- {
- return SystemFilter.addPathTerminator(getFolderPath(mgrFolder))
- + getSaveFileName(namingPolicy.getReferenceManagerSaveFileName(name));
- }
- /**
- * Derive and return the unqualified file name used to store this to disk.
- * It is unqualified.
- */
- protected static String getSaveFileName(String fileNameNoSuffix)
- {
- return fileNameNoSuffix + ISystemFilterConstants.SAVEFILE_SUFFIX;
- }
- /**
- * non-static version.
- */
- protected String getSaveFilePathAndName()
- {
- return SystemFilter.addPathTerminator(getFolderPath(mgrFolder))
- + getSaveFileName();
- }
- /**
- * non-static version.
- */
- protected String getSaveFileName()
- {
- return getSaveFileName(namingPolicy.getReferenceManagerSaveFileName(getName()));
- }
-
+ if (refdPool != null) {
+ poolRefs[idx].setReferenceToFilterPool(refdPool); // calls refdPool.addReference(poolRef)
+ } else {
- /**
- * Return the folder that this manager is contained in.
- */
- public IFolder getFolder()
- {
- return mgrFolder;
- }
+ badRefs.addElement(poolRefs[idx]);
+ }
+ }
+ if (badRefs.size() == 0)
+ return null;
+ else {
+ for (int idx = 0; idx < badRefs.size(); idx++) {
+ ISystemFilterPoolReference badRef = (ISystemFilterPoolReference) badRefs.elementAt(idx);
+ //badRef.setReferenceBroken(true);
+ super.removeReferencingObject(badRef);
+ }
+ invalidateFilterPoolReferencesCache();
+ quietSave();
+ //System.out.println("End of resolveReferencesAfterRestore for provider " + getName());
+ return badRefs;
+ }
+ }
+ }
+ return null;
+ }
- /**
- * Reset the folder that this manager is contained in.
- */
- public void resetManagerFolder(IFolder newFolder)
- {
- mgrFolder = newFolder;
- }
+ /**
+ * Utility method to scan across all filter pools in a given named filter pool manager, for a match
+ * on a given filter pool name.
+ *