]> git.uio.no Git - ifi-stolz-refaktor.git/blobdiff - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathAttributeConfigurationDescriptors.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / wizards / buildpaths / ClasspathAttributeConfigurationDescriptors.java
diff --git a/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathAttributeConfigurationDescriptors.java b/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathAttributeConfigurationDescriptors.java
new file mode 100644 (file)
index 0000000..8f77d04
--- /dev/null
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 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.jdt.internal.ui.wizards.buildpaths;
+
+import java.util.HashMap;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.ISafeRunnable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
+import org.eclipse.core.runtime.Status;
+
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.wizards.ClasspathAttributeConfiguration;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.util.CoreUtility;
+
+public class ClasspathAttributeConfigurationDescriptors {
+
+       private static class Descriptor {
+
+               private IConfigurationElement fConfigElement;
+               private ClasspathAttributeConfiguration fInstance;
+
+               private static final String ATT_NAME = "attributeName"; //$NON-NLS-1$
+               private static final String ATT_CLASS = "class"; //$NON-NLS-1$
+
+               public Descriptor(IConfigurationElement configElement) throws CoreException {
+                       fConfigElement = configElement;
+                       fInstance= null;
+
+                       String name = configElement.getAttribute(ATT_NAME);
+                       String pageClassName = configElement.getAttribute(ATT_CLASS);
+
+                       if (name == null) {
+                               throw new CoreException(new Status(IStatus.ERROR, JavaUI.ID_PLUGIN, 0, "Invalid extension (missing attributeName)", null)); //$NON-NLS-1$
+                       }
+                       if (pageClassName == null) {
+                               throw new CoreException(new Status(IStatus.ERROR, JavaUI.ID_PLUGIN, 0, "Invalid extension (missing class name): " + name, null)); //$NON-NLS-1$
+                       }
+               }
+
+               public ClasspathAttributeConfiguration getInstance() throws CoreException  {
+                       if (fInstance == null) {
+                               Object elem= CoreUtility.createExtension(fConfigElement, ATT_CLASS);
+                               if (elem instanceof ClasspathAttributeConfiguration) {
+                                       fInstance= (ClasspathAttributeConfiguration) elem;
+                               } else {
+                                       throw new CoreException(new Status(IStatus.ERROR, JavaUI.ID_PLUGIN, 0, "Invalid extension (page not of type IClasspathContainerPage): " + getKey(), null)); //$NON-NLS-1$
+                               }
+                       }
+                       return fInstance;
+               }
+
+               public String getKey() {
+                       return fConfigElement.getAttribute(ATT_NAME);
+               }
+       }
+
+       private static final String ATT_EXTENSION = "classpathAttributeConfiguration"; //$NON-NLS-1$
+
+       private HashMap<String, Descriptor> fDescriptors;
+
+       public ClasspathAttributeConfigurationDescriptors() {
+               fDescriptors= null;
+       }
+
+       private HashMap<String, Descriptor> getDescriptors() {
+               if (fDescriptors == null) {
+                       fDescriptors= readExtensions();
+               }
+               return fDescriptors;
+       }
+
+       public boolean containsKey(String attributeKey) {
+               return getDescriptors().containsKey(attributeKey);
+       }
+
+       public ClasspathAttributeConfiguration get(final String attributeKey) {
+               final Descriptor desc= getDescriptors().get(attributeKey);
+               if (desc == null) {
+                       return null;
+               }
+               final ClasspathAttributeConfiguration[] res= { null };
+               SafeRunner.run(new ISafeRunnable() {
+
+                       public void handleException(Throwable exception) {
+                               JavaPlugin.log(exception);
+                               getDescriptors().remove(attributeKey); // remove from list
+                       }
+
+                       public void run() throws Exception {
+                               res[0]= desc.getInstance();
+                       }
+               });
+               return res[0];
+       }
+
+       private static HashMap<String, Descriptor> readExtensions() {
+               IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor(JavaUI.ID_PLUGIN, ATT_EXTENSION);
+               HashMap<String, Descriptor> descriptors= new HashMap<String, Descriptor>(elements.length * 2);
+               for (int i= 0; i < elements.length; i++) {
+                       try {
+                               Descriptor curr= new Descriptor(elements[i]);
+                               descriptors.put(curr.getKey(), curr);
+                       } catch (CoreException e) {
+                               JavaPlugin.log(e);
+                       }
+               }
+               return descriptors;
+       }
+
+}