/**
*
*/
package org.nightlabs.jfire.trade.admin.ui.search;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import javax.jdo.JDOHelper;
import org.apache.log4j.Logger;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IEditorMatchingStrategy;
import org.eclipse.ui.IEditorRegistry;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.registry.EditorRegistry;
import org.nightlabs.base.ui.search.AbstractSearchResultActionHandler;
import org.nightlabs.base.ui.util.RCPUtil;
import org.nightlabs.jfire.store.ProductType;
import org.nightlabs.jfire.store.id.ProductTypeID;
import org.nightlabs.jfire.trade.admin.ui.editor.ProductTypeEditorInput;
/**
* @author Daniel Mazurek - daniel [at] nightlabs [dot] de
*
*/
public class GenericProductTypeSearchAdminActionHandler
extends AbstractSearchResultActionHandler
{
private static final Logger logger = Logger.getLogger(GenericProductTypeSearchAdminActionHandler.class);
/* (non-Javadoc)
* @see org.nightlabs.base.ui.search.ISearchResultActionHandler#run()
*/
@Override
public void run() {
Collection<ProductType> selectedObjects = getSearchResultProvider().getSelectedObjects();
if (selectedObjects != null)
{
Collection<ProductTypeID> objectIDs = new ArrayList<ProductTypeID>(selectedObjects.size());
for (ProductType productType : selectedObjects) {
objectIDs.add((ProductTypeID) JDOHelper.getObjectId(productType));
}
Map<ProductTypeID, String> productTypeID2EditorID = new HashMap<ProductTypeID, String>(selectedObjects.size());
IEditorRegistry editorRegistry = PlatformUI.getWorkbench().getEditorRegistry();
if (editorRegistry instanceof EditorRegistry) {
EditorRegistry registry = (EditorRegistry) editorRegistry;
IEditorDescriptor[] descriptors = registry.getSortedEditorsFromPlugins();
for (IEditorDescriptor descriptor : descriptors) {
IEditorMatchingStrategy strategy = descriptor.getEditorMatchingStrategy();
if (strategy != null) {
for (ProductTypeID productTypeID : objectIDs) {
if (strategy.matches(null, new ProductTypeEditorInput(productTypeID))) {
productTypeID2EditorID.put(productTypeID, descriptor.getId());
}
}
}
// if (descriptor instanceof EditorDescriptor) {
// EditorDescriptor desc = (EditorDescriptor) descriptor;
// try {
// IEditorPart editorPart = desc.createEditor();
// if (editorPart instanceof AbstractProductTypeAdminEditor) {
// AbstractProductTypeAdminEditor adminEditor = (AbstractProductTypeAdminEditor) editorPart;
// Class<? extends ProductType> productTypeClass = adminEditor.getProductTypeClass();
// for (ProductTypeID productTypeID : objectIDs) {
// Class<?> clazz = JDOObjectID2PCClassMap.sharedInstance().getPersistenceCapableClass(productTypeID);
// if (clazz.equals(productTypeClass)) {
// productTypeID2EditorID.put(productTypeID, descriptor.getId());
// }
// }
// }
// } catch (CoreException e) {
// logger.error("Could not create editorPart with id "+descriptor.getId(), e);
// }
// }
}
}
for (Map.Entry<ProductTypeID, String> entry : productTypeID2EditorID.entrySet()) {
try {
RCPUtil.openEditor(new ProductTypeEditorInput(entry.getKey()), entry.getValue());
} catch (PartInitException e) {
throw new RuntimeException(e);
}
}
}
}
}