package de.urszeidler.shr5.ecp.editor;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil;
import de.urszeidler.emf.commons.ui.editor.BasicEditor;
import de.urszeidler.emf.commons.ui.util.EmfFormBuilder.ReferenceManager;
import de.urszeidler.shr5.ecp.Activator;
/**
* Holds the basic behavior.
*
* @author urs
*/
public abstract class AbstractShr5Editor extends BasicEditor<EObject> {
protected ReferenceManager manager;
public AbstractShr5Editor() {
super();
manager = createReferenceManager();
}
/**
* @return
*/
protected ShrReferenceManager createReferenceManager() {
return new ShrReferenceManager(this, AdapterFactoryUtil.getInstance().getItemDelegator(),getEditingDomain());
}
@Override
protected void initAdatpterFactory() {
adapterFactory = AdapterFactoryUtil.getInstance().getAdapterFactory();
basicContentProvider = new AdapterFactoryContentProvider(adapterFactory);
itemDelegator = new AdapterFactoryItemDelegator(adapterFactory);
labelProvider = new AdapterFactoryLabelProvider(adapterFactory);
}
@Override
protected void logError(String message, Exception exception) {
Activator.logError(message, exception);
}
@Override
protected void setInputObject(EObject eobject) {
}
public AdapterFactoryLabelProvider getLabelProvider() {
return labelProvider;
}
@Override
public boolean isSaveOnCloseNeeded() {
return false;
}
/**
* This is for implementing {@link IEditorPart} and simply tests the command
* stack.
*/
@Override
public boolean isDirty() {
return false;
// if (getEditingDomain() == null)
// return false;
//
// return ((BasicCommandStack)
// getEditingDomain().getCommandStack()).isSaveNeeded();
}
@Override
public TabbedPropertySheetPage getTabbedPropertySheetPage() {
return null;
}
@Override
public String getContributorId() {
return null;
}
@Override
public void doSaveAs() {
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
// private EObject defaultCreationDialog(FormbuilderEntry e, EObject object) {
//
// Collection<EClass> filteredEClasses = ShadowrunEditingTools.provideNewClassTypes(object, e.getFeature(), editingDomain);// provideNewClassTypes(object,
// // e.getFeature());
// if (filteredEClasses.size() == 1) {
// EClass eClass = filteredEClasses.iterator().next();
// return eClass.getEPackage().getEFactoryInstance().create(eClass);
// }
//
// OwnChooseDialog dialog = new OwnChooseDialog(getEditorSite().getShell(), filteredEClasses.toArray(new Object[]{}),
// Messages.ShadowrunEditor_dlg_select_type, Messages.ShadowrunEditor_dlg_select_persona_type);
// dialog.setLabelProvider(AdapterFactoryUtil.getInstance().getLabelProvider());
// int open = dialog.open();
// if (open == Dialog.OK) {
// Object[] result = dialog.getResult();
// if (result.length > 0) {
// EClass eClass = (EClass)result[0];
// return eClass.getEPackage().getEFactoryInstance().create(eClass);
// }
// }
//
// return null;
// }
//
// /**
// * @param object_ref
// * @param orgObject
// * @return
// */
// private List<EObject> handleCopyAddToPersona(EReference object_ref, EObject orgObject) {
// Collection<EObject> collection = ItemPropertyDescriptor.getReachableObjectsOfType(getEObject(), object_ref.getEType());
// ShrList basicList = Shr5Factory.eINSTANCE.createShrList();
//
// FeatureEditorDialog dialog = new FeatureEditorDialogWert(getSite().getShell(), labelProvider, basicList,
// Shr5Package.Literals.SHR_LIST__ENTRIES, "Add " + labelProvider.getText(object_ref), new ArrayList<EObject>(collection),orgObject);
//
// int result = dialog.open();
// if (result == Window.OK) {
// EList<?> list = dialog.getResult();
// List<EObject> objectList = new ArrayList<EObject>();
// for (Object object : list) {
// if (object instanceof EObject) {
// EObject eo = (EObject)object;
// EObject copy = copyWithParentId(eo);
// objectList.add(copy);
// }
// }
//
// return objectList;
// }
// return null;
// }
//
// /**
// * Creates a copy of the eobject, when it is an {@link Identifiable} the parent id will be set to the id of the org object when the org object has
// * no parentId set. So the copied object has the org id as parentId or the parentId.
// *
// * @param eo the org {@link EObject}
// * @return the copy
// */
// private EObject copyWithParentId(EObject eo) {
// EObject copy = EcoreUtil.copy(eo);
// if (eo.eResource() instanceof XMLResource) {
// XMLResource xmlRes = (XMLResource)eo.eResource();
// String id = xmlRes.getID(eo);
// if (copy instanceof Identifiable) {
// String parentId = ((Identifiable)eo).getParentId();
// if (parentId != null && !parentId.isEmpty())
// id = parentId;
//
// Identifiable iden = (Identifiable)copy;
// iden.setParentId(id);
// }
// }
// return copy;
// }
}