+package eu.etaxonomy.taxeditor.bulkeditor.input;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.swt.SWT;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.menus.CommandContributionItem;
+import org.eclipse.ui.menus.CommandContributionItemParameter;
+
+import eu.etaxonomy.cdm.model.agent.AgentBase;
+import eu.etaxonomy.cdm.model.common.Group;
+import eu.etaxonomy.cdm.model.common.User;
+import eu.etaxonomy.cdm.model.name.NameRelationship;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorConstants;
+
+public enum BulkEditorInputType {
+ AGENT("Authors and Author Teams", AgentEditorInput.ID),
+ REFERENCE("Reference", ReferenceEditorInput.ID),
+ NAME("Name", NameEditorInput.ID),
+ NAME_RELATIONSHIP("Name Relationship", NameRelationshipEditorInput.ID),
+ OCCURRENCE("Specimens and Observations", OccurrenceEditorInput.ID),
+ USER("User", UserEditorInput.ID),
+ GROUP("Group", GroupEditorInput.ID);
+
+ public String id;
+ public String label;
+
+ BulkEditorInputType(String label, String id) {
+ this.id = id;
+ this.label = label;
+ }
+
+ public IContributionItem createContributionItem(){
+ return createContributionItem(label, id);
+ }
+
+ /**
+ * @param key
+ * @param object
+ * @return
+ */
+ private IContributionItem createContributionItem(String label,
+ String inputType) {
+ CommandContributionItemParameter parameter = new CommandContributionItemParameter(
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow(), null,
+ IBulkEditorConstants.DYNAMIC_OPEN_MENU_ID, SWT.NONE);
+
+ parameter.label = label;
+
+ Map parameters = new HashMap();
+ parameters.put(IBulkEditorConstants.INPUT_TYPE_PARAMETER_ID, inputType);
+ parameter.parameters = parameters;
+
+ return new CommandContributionItem(parameter);
+ }
+
+ public static BulkEditorInputType getById(String id) {
+
+ for (BulkEditorInputType type : values()) {
+ if (id.equals(type.id)) {
+ return type;
+ }
+ }
+
+ return null;
+ }
+
+ public static BulkEditorInputType getByType(Class clazz) {
+ if (Reference.class.isAssignableFrom(clazz)) {
+ return REFERENCE;
+ } else if (TaxonNameBase.class.isAssignableFrom(clazz)) {
+ return NAME;
+ } else if (AgentBase.class.isAssignableFrom(clazz)) {
+ return AGENT;
+ } else if (SpecimenOrObservationBase.class.isAssignableFrom(clazz)) {
+ return OCCURRENCE;
+ } else if (NameRelationship.class.isAssignableFrom(clazz)) {
+ return NAME_RELATIONSHIP;
+ } else if (Group.class.isAssignableFrom(clazz)) {
+ return GROUP;
+ } else if (User.class.isAssignableFrom(clazz)) {
+ return USER;
+ }
+ return null;
+ }
+
+ public static BulkEditorInputType getByInput(IEditorInput input) {
+ if (input instanceof ReferenceEditorInput) {
+ return REFERENCE;
+ } else if (input instanceof NameEditorInput) {
+ return NAME;
+ } else if (input instanceof AgentEditorInput) {
+ return AGENT;
+ } else if (input instanceof OccurrenceEditorInput) {
+ return OCCURRENCE;
+ } else if (input instanceof NameRelationshipEditorInput) {
+ return NAME_RELATIONSHIP;
+ } else if (input instanceof UserEditorInput) {
+ return USER;
+ } else if (input instanceof GroupEditorInput) {
+ return GROUP;
+ }
+ return null;
+ }
+
+ public static AbstractBulkEditorInput getInput(
+ BulkEditorInputType inputType) {
+ switch (inputType) {
+ case REFERENCE:
+ return new ReferenceEditorInput();
+ case NAME:
+ return new NameEditorInput();
+ case AGENT:
+ return new AgentEditorInput();
+ case OCCURRENCE:
+ return new OccurrenceEditorInput();
+ case NAME_RELATIONSHIP:
+ return new NameRelationshipEditorInput();
+ case USER:
+ return new UserEditorInput();
+ case GROUP:
+ return new GroupEditorInput();
+ default:
+ throw new IllegalStateException(
+ "No input class for the given input type defined.");
+ }
+ }
+}
\ No newline at end of file