package org.kie.eclipse.navigator.preferences;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.internal.dialogs.PropertyDialog;
import org.kie.eclipse.IKieConstants;
import org.kie.eclipse.navigator.view.content.IContentNode;
import org.kie.eclipse.navigator.view.content.OrganizationNode;
import org.kie.eclipse.navigator.view.content.ProjectNode;
import org.kie.eclipse.navigator.view.content.RepositoryNode;
import org.kie.eclipse.navigator.view.content.ServerNode;
import org.kie.eclipse.server.IKieResourceHandler;
@SuppressWarnings("restriction")
public abstract class AbstractKiePropertyPage extends FieldEditorPropertyPage implements IKieConstants {
private final static String INITIAL_PAGE_ID = "org.kie.eclipse.navgiator.initialPageId";
/**
* The KIE Resource Handler for the current selection
*/
private IKieResourceHandler resourceHandler;
private IContentNode<?> contentNode;
public AbstractKiePropertyPage() {
}
public AbstractKiePropertyPage(int style) {
super(style);
}
@Override
protected Control createContents(Composite parent) {
PropertyDialog pd = (PropertyDialog)getContainer();
Object data = pd.getTreeViewer().getData(INITIAL_PAGE_ID);
if (data==null) {
String id = getInitialPageId();
if (id!=null) {
pd.setCurrentPageId(id);
pd.getTreeViewer().setData(INITIAL_PAGE_ID, id);
}
}
return super.createContents(parent);
}
@Override
public void dispose() {
PropertyDialog pd = (PropertyDialog)getContainer();
pd.getTreeViewer().getTree().deselectAll();
super.dispose();
}
protected IContentNode<?> getContentNode() {
if (contentNode==null) {
PropertyDialog pd = (PropertyDialog) getContainer();
IStructuredSelection selection = (IStructuredSelection) pd.getSelection();
TreeSelection ts = (TreeSelection) ((IStructuredSelection) selection).getFirstElement();
Object element = ts.getFirstElement();
if (element instanceof IJavaProject) {
element = ((IJavaProject)element).getProject();
}
if (element instanceof IResource) {
try {
element = ((IResource)element).getSessionProperty(IKieResourceHandler.RESOURCE_KEY);
}
catch (CoreException e) {
e.printStackTrace();
}
}
if (element instanceof IContentNode)
contentNode = (IContentNode<?>) element;
}
return contentNode;
}
protected abstract Class<? extends IKieResourceHandler> getResourceHandlerType();
protected IKieResourceHandler getResourceHandler() {
if (resourceHandler==null) {
IContentNode<?> node = getContentNode();
IKieResourceHandler h = node.getHandler();
while (h!=null) {
if (h.getClass()==getResourceHandlerType()) {
resourceHandler = h;
break;
}
h = h.getParent();
}
}
return resourceHandler;
}
@Override
protected String getPreferenceName(String name) {
setPreferenceStore(getPreferenceStore());
return resourceHandler.getPreferenceName(name);
}
@Override
protected String getInitialPageId() {
IContentNode<?> node = getContentNode();
if (node instanceof ServerNode)
return "org.kie.eclipse.navigator.serverPropertyPage";
if (node instanceof OrganizationNode)
return "org.kie.eclipse.navigator.organizationPropertyPage";
if (node instanceof RepositoryNode)
return "org.kie.eclipse.navigator.repositoryPropertyPage";
if (node instanceof ProjectNode)
return "org.kie.eclipse.navigator.projectPropertyPage";
return null;
}
}