import java.util.HashMap;\r
import java.util.Iterator;\r
import java.util.ListIterator;\r
+import java.util.Stack;\r
import java.util.Vector;\r
\r
import javax.swing.JTextField;\r
//\r
// display library classes that need to be resolved. also potential instances for them.\r
//\r
- resolveLibraryInstances(moduleKey, errorMsg);\r
+ resolveLibraryInstances(moduleKey, true, errorMsg);\r
} catch (Exception e) {\r
String exceptionMsg = e.getCause() + " " + e.getMessage();\r
errorMsg.add(exceptionMsg);\r
// re-evaluate lib instance usage when adding a already-selected lib instance.\r
//\r
try {\r
- resolveLibraryInstances(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4], errorMsg);\r
+ resolveLibraryInstances(saa[i][1] + " " + saa[i][2] + " " + saa[i][3] + " " + saa[i][4], true, errorMsg);\r
} catch (Exception e) {\r
String exceptionMsg = e.getCause() + " " + e.getMessage();\r
if (!errorMsg.contains(exceptionMsg)) {\r
}\r
JOptionPane.showMessageDialog(FrameworkWizardUI.getInstance(), errors);\r
}\r
- showClassToResolved();\r
}\r
\r
public void initFvInfo (String key) {\r
}\r
}\r
\r
- private void resolveLibraryInstances(String key, Vector<String> errorMsg) throws MultipleInstanceException, NoInstanceException{\r
+ private void addProducedClassFromModule (String key) {\r
ModuleIdentification mi = WorkspaceProfile.getModuleId(key);\r
- PackageIdentification[] depPkgList = null;\r
- \r
- //\r
- // Get dependency pkg list into which we will search lib instances.\r
- //\r
- //depPkgList = SurfaceAreaQuery.getDependencePkg(null, mi);\r
- //\r
- // Get the lib class consumed, produced by this module itself.\r
- //\r
- Vector<LibraryClassDescriptor> vClassConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED", mi);\r
- for (int i = 0; i < vClassConsumed.size(); ++i) {\r
- vClassConsumed.get(i).supModTypes = WorkspaceProfile.getModuleType(moduleId);\r
- }\r
- filterClassConsumedByArch(vClassConsumed);\r
- if (this.classConsumed == null) {\r
- this.classConsumed = new HashMap<LibraryClassDescriptor, ArrayList<String>>();\r
- }\r
-\r
- for (int i = 0; i < vClassConsumed.size(); ++i) {\r
- ArrayList<String> consumedBy = this.classConsumed.get(vClassConsumed.get(i));\r
- if (consumedBy == null) {\r
- consumedBy = new ArrayList<String>();\r
- }\r
- consumedBy.add(key);\r
- this.classConsumed.put(vClassConsumed.get(i), consumedBy);\r
- }\r
-\r
Vector<LibraryClassDescriptor> vClassProduced = SurfaceAreaQuery.getLibraryClasses("ALWAYS_PRODUCED", mi);\r
if (this.classProduced == null) {\r
this.classProduced = new HashMap<LibraryClassDescriptor, ArrayList<String>>();\r
this.classProduced.put(vClassProduced.get(i), producedBy);\r
\r
}\r
+ }\r
+ \r
+ private Vector<LibraryClassDescriptor> addConsumedClassFromModule (String key) {\r
+ ModuleIdentification mi = WorkspaceProfile.getModuleId(key);\r
+// PackageIdentification[] depPkgList = null;\r
\r
//\r
- // find potential instances in all pkgs for classes still in classConsumed.\r
+ // Get dependency pkg list into which we will search lib instances.\r
+ //\r
+ //depPkgList = SurfaceAreaQuery.getDependencePkg(null, mi);\r
+ //\r
+ // Get the lib class consumed, produced by this module itself.\r
//\r
+ Vector<LibraryClassDescriptor> vClassConsumed = SurfaceAreaQuery.getLibraryClasses("ALWAYS_CONSUMED", mi);\r
+ for (int i = 0; i < vClassConsumed.size(); ++i) {\r
+ vClassConsumed.get(i).supModTypes = WorkspaceProfile.getModuleType(moduleId);\r
+ }\r
+ filterClassConsumedByArch(vClassConsumed);\r
+ if (this.classConsumed == null) {\r
+ this.classConsumed = new HashMap<LibraryClassDescriptor, ArrayList<String>>();\r
+ }\r
+\r
+ for (int i = 0; i < vClassConsumed.size(); ++i) {\r
+ ArrayList<String> consumedBy = this.classConsumed.get(vClassConsumed.get(i));\r
+ if (consumedBy == null) {\r
+ consumedBy = new ArrayList<String>();\r
+ }\r
+ consumedBy.add(key);\r
+ this.classConsumed.put(vClassConsumed.get(i), consumedBy);\r
+ }\r
+\r
+ return vClassConsumed;\r
+ }\r
+ \r
+ private void resolveLibraryInstances(String key, boolean autoSelectSingleInstance, Vector<String> errorMsg) throws MultipleInstanceException, NoInstanceException{\r
+ \r
+ Vector<LibraryClassDescriptor> vLcd = addConsumedClassFromModule (key);\r
+ addProducedClassFromModule (key);\r
+ \r
+ Stack<LibraryClassDescriptor> lcdStack = new Stack<LibraryClassDescriptor>();\r
+ for (int i = 0; i < vLcd.size(); ++i) {\r
+ LibraryClassDescriptor cls = vLcd.get(i);\r
+ lcdStack.push(cls);\r
+ }\r
+ \r
if (classInstanceMap == null) {\r
classInstanceMap = new HashMap<LibraryClassDescriptor, ArrayList<String>>();\r
}\r
- Iterator<LibraryClassDescriptor> lic = this.classConsumed.keySet().iterator();\r
- while (lic.hasNext()) {\r
- LibraryClassDescriptor cls = lic.next();\r
+ while (!lcdStack.empty()) {\r
+ LibraryClassDescriptor cls = lcdStack.pop();\r
if (isBoundedClass(cls, errorMsg)) {\r
continue;\r
}\r
- ArrayList<String> instances = getInstancesForClass(cls, depPkgList);\r
+ ArrayList<String> instances = getInstancesForClass(cls, null);\r
if (instances.size() == 0) {\r
// throw new NoInstanceException (cls.className);\r
String exceptionMsg = new NoInstanceException (cls.className).getMessage();\r
\r
}\r
classInstanceMap.put(cls, instances);\r
+ if (instances.size() == 1 && autoSelectSingleInstance) {\r
+ String instanceInfo = instances.get(0);\r
+ ModuleIdentification libMi = WorkspaceProfile.getModuleId(instanceInfo);\r
+ try {\r
+ Object[] row = {libMi.getName(), libMi.getGuid(), libMi.getVersion(), \r
+ libMi.getPackageId().getGuid(), libMi.getPackageId().getVersion()};\r
+ if (!ffc.instanceExistsInModuleSA(moduleKey, row[1]+"", row[2]+"", row[3]+"", row[4]+"")) {\r
+ addLibInstance(libMi);\r
+ docConsole.setSaved(false);\r
+ selectedInstancesTableModel.addRow(row);\r
+ addProducedClassFromModule (instanceInfo);\r
+ vLcd = addConsumedClassFromModule(instanceInfo);\r
+ for (int i = 0; i < vLcd.size(); ++i) {\r
+ LibraryClassDescriptor lcd = vLcd.get(i);\r
+ lcdStack.push(lcd);\r
+ }\r
+ }\r
+ }\r
+ catch (Exception e) {\r
+ if (!errorMsg.contains(e.getMessage())) {\r
+ errorMsg.add(e.getMessage());\r
+ }\r
+ }\r
+ }\r
+ }\r
\r
+ showClassToResolved();\r
}\r
-// showClassToResolved();\r
- }\r
+// \r
\r
/**Search classProduced map to see if this class has been produced by some instance (module).\r
* @param cls\r
if (classConsumed == null || classConsumed.size() == 0) {\r
return;\r
}\r
+\r
Iterator<LibraryClassDescriptor> li = classConsumed.keySet().iterator();\r
while(li.hasNext()){\r
LibraryClassDescriptor lcd = li.next();\r
- String[] s = {lcd.className, lcd.supArchs, lcd.supModTypes};\r
if (classConsumed.get(lcd) == null || classConsumed.get(lcd).size() == 0) {\r
continue;\r
}\r
\r
if (!isBoundedClass(lcd, errorMsg)){\r
+ \r
+ String[] s = { lcd.className, lcd.supArchs, lcd.supModTypes };\r
libClassTableModel.addRow(s);\r
}\r
}\r
\r
Vector<String> errorMsg = new Vector<String>();\r
try {\r
- resolveLibraryInstances(instanceValue, errorMsg);\r
+ resolveLibraryInstances(instanceValue, true, errorMsg);\r
}\r
catch (Exception exp) {\r
JOptionPane.showMessageDialog(FpdModuleSA.this, exp.getMessage());\r
}\r
JOptionPane.showMessageDialog(FpdModuleSA.this, errors);\r
}\r
- showClassToResolved();\r
}\r
});\r
}\r