19 package com.generalrobotix.ui;
21 import java.awt.Toolkit;
22 import java.awt.datatransfer.Clipboard;
23 import java.awt.datatransfer.DataFlavor;
24 import java.awt.datatransfer.Transferable;
26 import java.lang.reflect.Method;
30 import org.eclipse.core.resources.ResourcesPlugin;
31 import org.eclipse.jface.action.Action;
32 import org.eclipse.jface.dialogs.MessageDialog;
33 import org.eclipse.jface.preference.IPreferenceStore;
34 import org.eclipse.jface.util.IPropertyChangeListener;
35 import org.eclipse.jface.util.PropertyChangeEvent;
36 import org.omg.PortableServer.POA;
38 import org.w3c.dom.Element;
59 import org.eclipse.osgi.util.NLS;
60 import org.eclipse.swt.SWT;
61 import org.eclipse.swt.widgets.Display;
62 import org.eclipse.swt.widgets.FileDialog;
63 import org.eclipse.ui.IPerspectiveDescriptor;
64 import org.eclipse.ui.IViewPart;
65 import org.eclipse.ui.IViewReference;
66 import org.eclipse.ui.IWorkbench;
67 import org.eclipse.ui.IWorkbenchPage;
68 import org.eclipse.ui.IWorkbenchWindow;
69 import org.eclipse.ui.PlatformUI;
88 private List<GrxBaseView>
viewList_ =
new ArrayList<GrxBaseView>();
94 new HashMap<Class<? extends GrxBaseItem>, List<GrxItemChangeListener>>();
127 dir = System.getenv(
"PROJECT_DIR");
132 System.out.println(
"[PM] WORKSPACE PATH=" + ResourcesPlugin.getWorkspace().getRoot().getLocation());
142 if (!rtcFile.exists()){
145 }
catch (IOException ex){
146 ex.printStackTrace();
153 String defaultProject = System.getProperty(
"PROJECT",
null);
159 if (serverManager !=
null){
164 if (processManager !=
null){
203 IWorkbench workbench = PlatformUI.getWorkbench();
204 IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
207 IWorkbenchPage page = window.getActivePage();
210 IPerspectiveDescriptor pers = page.getPerspective();
223 Display display = Display.getDefault();
224 display.syncExec(
new Runnable(){
226 IWorkbench workbench = PlatformUI.getWorkbench();
227 IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
230 IWorkbenchPage page = window.getActivePage();
234 IPerspectiveDescriptor pers = page.getPerspective();
240 for (IViewReference
i : page.getViewReferences()) {
242 IViewPart v =
i.getView(
true);
243 if (v !=
null &&
GrxBaseViewPart.class.isAssignableFrom(v.getClass())) {
257 Display display = Display.getDefault();
258 display.syncExec(
new Runnable(){
260 IWorkbench workbench = PlatformUI.getWorkbench();
261 IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
262 if (windows.length == 0)
264 for(IWorkbenchWindow window : windows){
265 IWorkbenchPage page = window.getActivePage();
267 IPerspectiveDescriptor pers = page.getPerspective();
269 for (IViewReference
i : page.getViewReferences()) {
271 IViewPart v =
i.getView(
true);
272 if (v !=
null &&
GrxBaseViewPart.class.isAssignableFrom(v.getClass())) {
294 System.out.println(
"[PM] START GrxPluginManager");
299 poa_.the_POAManager().activate();
304 }
catch (Exception e) {
375 @SuppressWarnings(
"unchecked")
387 @SuppressWarnings(
"unchecked")
390 Class<? extends GrxBasePlugin> ret =
registerPlugin((Class<? extends GrxBasePlugin>) cls);
404 public Class<? extends GrxBasePlugin>
registerPlugin(Class<? extends GrxBasePlugin> cls) {
405 if (cls !=
null &&
GrxBasePlugin.class.isAssignableFrom(cls)) {
416 pi.filter =
"*." + ext;
437 baseName = baseName.toLowerCase().replaceAll(
" ",
"");
438 for (
int i = 0;;
i++) {
466 URL u =
new URL(_url);
467 f =
new File(u.getFile());
468 }
catch (Exception e) {
473 _url =
f.getCanonicalPath();
475 }
catch (IOException e) {
482 String[] fe = { pi.filter };
483 fdlg.setText(_url+
" "+
MessageBundle.
get(
"GrxPluginManager.fileDialog.notFound"));
484 fdlg.setFilterExtensions(fe);
485 fdlg.setFilterPath(pi.lastDir.getAbsolutePath());
486 String fPath = fdlg.open();
495 String
basename =
f.getName().split(
"[.]")[0];
511 item.setDefaultDirectory(
f.getParent());
512 pinfoMap_.get(cls).lastDir =
f.getParentFile();
560 @SuppressWarnings(
"unchecked")
567 HashMap<String, GrxBasePlugin> map =
pluginMap_.get(cls);
569 if ( plugin !=
null) {
578 }
catch (Exception e) {
590 @SuppressWarnings(
"unchecked")
592 HashMap<String, GrxBasePlugin> map =
pluginMap_.get(instance.getClass());
594 if ( plugin !=
null) {
595 GrxDebugUtil.
println(
"[PM]@createPlugin Plugin instance named "+instance.getName()+
" is already registered.");
598 map.put(instance.getName(), instance);
602 map.put(instance.getName(), instance);
614 Throwable cause = e.getCause();
615 StackTraceElement[] trace =
null;
616 String msg = m +
"\n\n";
618 msg = cause.toString() +
"\n\n";
619 trace = cause.getStackTrace();
621 trace = e.getStackTrace();
624 for (
int i = 0;
i < trace.length;
i++) {
625 msg +=
"at " + trace[
i].getClassName() +
"." + trace[
i].getMethodName() +
"(";
627 if (trace[
i].isNativeMethod()) {
628 msg +=
"(Native Method)\n";
629 }
else if (trace[
i].getFileName() ==
null) {
630 msg +=
"(No source code)\n";
632 msg += trace[
i].getFileName() +
":" + trace[
i].getLineNumber() +
")\n";
635 MessageDialog.openWarning(
null,
"Exception Occered", msg);
646 m.remove(
item.getName());
659 List<GrxModelItem> modifiedModels =
new ArrayList<GrxModelItem>();
660 for (
int i = 0;
i < items.length;
i++){
661 int ret = ((
GrxModelItem)items[
i]).checkModifiedModel(
false);
664 modifiedModel.reload();
672 for (
int i = 0;
i < items.length;
i++)
698 System.out.println(
"map for " +
item.getClass() +
" doesn't exist in pluginMap_");
701 if (m.get(newName) ==
null) {
702 if (!newName.equals(
item.getName())) {
705 item.setName(newName);
709 System.out.println(
"GrxPluginManager.renamePlugin() : " + newName +
" is already used");
720 ArrayList<GrxBaseItem> iList =
new ArrayList<GrxBaseItem>();
721 for (
int i = 0;
i < cList.size();
i++) {
722 Iterator it =
pluginMap_.get(cList.get(
i)).values().iterator();
723 while (it.hasNext()) {
738 Iterator it =
pluginMap_.get(cls).values().iterator();
739 while (it.hasNext()) {
756 Iterator<OrderedHashMap> it =
pluginMap_.values().iterator();
757 while (it.hasNext()) {
758 HashMap m = (HashMap) it.next();
759 Object o = m.get(
name);
771 public Map<?, ?>
getItemMap(Class<? extends GrxBaseItem> cls) {
781 @SuppressWarnings(
"unchecked")
782 public <T> T getSelectedItem(Class<? extends
GrxBaseItem> cls, String
name) {
783 Map<String, ? extends GrxBaseItem> oMap =
pluginMap_.get(cls);
784 if(oMap==
null)
return null;
787 if(
item.isSelected())
792 for(GrxBaseItem
item : oMap.values()){
793 if(
item.isSelected())
805 @SuppressWarnings(
"unchecked")
806 public <T> List<T> getSelectedItemList(Class<? extends GrxBaseItem> cls) {
807 ArrayList<T> list =
new ArrayList<T>();
808 Map<String, ? extends GrxBaseItem> oMap =
pluginMap_.get(cls);
809 if(oMap==
null)
return list;
810 for(GrxBaseItem
item : oMap.values()){
811 if (
item.isSelected())
844 if (v.getClass() == cls)
849 if (v.getClass() == cls)
859 if (v.getName().equals(
name)) {
866 if (v.getName().equals(
name)) {
881 @SuppressWarnings(
"unchecked")
886 if (select &&
item.isExclusive()) {
889 i.setSelected(
false);
898 item.setSelected(select);
908 Iterator<OrderedHashMap>
i =
pluginMap_.values().iterator();
909 while (
i.hasNext()) {
910 Iterator j = (
i.next()).values().iterator();
911 while (j.hasNext()) {
943 static final String VISIBLE =
"visible";
956 public Vector<Action>
getItemMenu(
final Class<? extends GrxBaseItem> cls) {
958 Vector<Action> menu = pi.menu;
963 menu = pi.menu =
new Vector<Action>();
966 Action
create =
new Action() {
967 public String getText() {
980 Action load =
new Action() {
981 public String getText() {
987 String[] fe = { pi.filter };
988 fdlg.setFilterExtensions(fe);
989 fdlg.setFilterPath(pi.lastDir.getAbsolutePath());
990 String fPath = fdlg.open();
992 File
f =
new File(fPath);
997 pi.lastDir =
f.getParentFile();
1005 Action clear =
new Action() {
1006 public String getText() {
1011 String mes =
MessageBundle.
get(
"GrxPluginManager.dialog.message.removeItem");
1013 if (MessageDialog.openConfirm(
null,
MessageBundle.
get(
"GrxPluginManager.dialog.title.removeItem"), mes)){
1023 Action
delete =
new Action() {
1024 public String getText() {
1029 String mes =
MessageBundle.
get(
"GrxPluginManager.dialog.message.deletePlugin");
1031 if (MessageDialog.openConfirm(
null,
MessageBundle.
get(
"GrxPluginManager.dialog.title.deletePlugin"), mes))
1038 Method m = cls.getMethod(
"create", (Class[])
null);
1039 Class<?>
c = m.getDeclaringClass();
1042 m = cls.getMethod(
"load", File.class);
1043 c = m.getDeclaringClass();
1045 m = cls.getMethod(
"paste", String.class);
1046 c = m.getDeclaringClass();
1048 Action paste =
new Action() {
1049 public String getText() {
1061 }
catch (Exception e) {
1062 e.printStackTrace();
1069 boolean found=
false;
1070 for(
int i=0;
i<itemClass.length;
i++){
1071 if(cls.getName().equals(itemClass[
i])){
1077 delete.setEnabled(
true);
1079 delete.setEnabled(
false);
1088 Method m = cls.getMethod(
"paste", String.class);
1089 Class<?>
c = m.getDeclaringClass();
1091 for (Action action : menu) {
1092 if (action.getText().equals(
"paste")) {
1098 }
catch (Exception e) {
1099 e.printStackTrace();
1117 Iterator<OrderedHashMap> it =
pluginMap_.values().iterator();
1118 for (; it.hasNext();) {
1119 Iterator it2 = (it.next()).values().iterator();
1120 for (; it2.hasNext();)
1126 orb_.shutdown(
false);
1226 Clipboard clp = Toolkit.getDefaultToolkit().getSystemClipboard();
1227 Transferable
data = clp.getContents(
null);
1229 if (
data !=
null &&
data.isDataFlavorSupported(DataFlavor.stringFlavor)) {
1231 ret = (String)
data.getTransferData(DataFlavor.stringFlavor);
1232 }
catch (Exception e) {
1261 List<GrxItemChangeListener> listenerList =
new ArrayList<GrxItemChangeListener>();
1263 while(it.hasNext()){
1265 Iterator<GrxItemChangeListener> itl = list.iterator();
1266 while(itl.hasNext()){
1268 if(!listenerList.contains(listener)){
1270 listenerList.add(listener);
1281 while(it.hasNext()){
1282 Class<? extends GrxBaseItem> cls = it.next();
1283 if(cls.isAssignableFrom(
item.getClass())){
1285 Iterator<GrxItemChangeListener> itView = list.iterator();
1286 while(itView.hasNext())
1287 itView.next().registerItemChange(
item, event);
1309 for(
int i=0;
i<mode.length;
i++){
1311 String[] index=itemIndex[
i].split(
",",-1);
1312 for(
int j=0; j<index.length; j++){
1313 int k=Integer.valueOf(index[j]);
1314 if(k<itemClass.length){
1316 Class<? extends GrxBasePlugin> plugin=
registerPlugin(itemClass[k]);
1317 if (plugin !=
null) {
1319 pi.visible = itemVisible[k].equals(
"true")? true :
false;
1321 item.addItemClassList(plugin);
1326 for(
int j=0; j<userItemClass.length; j++){
1327 if(!userItemClass[j].equals(
"")){
1330 Class<? extends GrxBasePlugin> plugin=
registerPlugin(userItemClass[j]);
1331 if (plugin !=
null) {
1333 pi.visible = userItemVisible[j].equals(
"true")? true :
false;
1335 item.addItemClassList(plugin);
1341 store.addPropertyChangeListener(
this);
1364 @SuppressWarnings(
"unchecked")
1366 if(event.getProperty().equals(
"userItemChange")){
1367 String newItemList = (String) event.getNewValue();
1369 String oldItemList = (String) event.getOldValue();
1376 Vector<Integer> delList =
new Vector<Integer>();
1377 for(
int i=0;
i<oldItems.length;
i++){
1379 for(String newItem : newItems){
1380 if(newItem.equals(oldItems[
i])){
1385 if(!flg && !oldItems[
i].equals(
""))
1386 delList.add(
new Integer(
i));
1391 for(Integer
i : delList){
1392 Class<? extends GrxBasePlugin> itemClass=
null;
1394 itemClass = (Class<? extends GrxBasePlugin>) Class.forName(oldItems[
i.intValue()],
false,
pluginLoader_);
1395 }
catch (ClassNotFoundException e) {
1399 removeItems((Class<? extends GrxBaseItem>) itemClass);
1400 Iterator<GrxModeInfoItem> it = modes.
values().iterator();
1401 while (it.hasNext()) {
1407 for(
int i=0;
i<newItems.length;
i++){
1409 Class<? extends GrxBasePlugin> itemClass=
null;
1411 itemClass = (Class<? extends GrxBasePlugin>) Class.forName(newItems[
i],
false,
pluginLoader_);
1412 }
catch (ClassNotFoundException e) {
1415 Iterator<GrxModeInfoItem> it = modes.
values().iterator();
1416 while (it.hasNext()) {
1420 pi.visible = userItemVisible[
i].equals(
"true")? true :
false;
1425 if (plugin !=
null) {
1427 pi.visible = userItemVisible[
i].equals(
"true")? true :
false;
1440 v.updateTableFont();
1447 v.updateEditerFont();
1453 @SuppressWarnings(
"unchecked")
1456 Class<? extends GrxBasePlugin> itemClass=
null;
1458 itemClass = (Class<? extends GrxBasePlugin>) Class.forName(className,
false,
pluginLoader_);
1459 }
catch (ClassNotFoundException e) {
1463 Iterator<GrxModeInfoItem> it = modes.
values().iterator();
1464 while (it.hasNext()) {
1469 if (plugin !=
null) {
1481 @SuppressWarnings(
"unchecked")
1486 Iterator<GrxModeInfoItem> it = modes.
values().iterator();
1487 while (it.hasNext()) {
1498 store.removePropertyChangeListener(
this);
1504 File
f =
new File(initProjectFile);
1505 if(
f.exists() &&
f.isFile())