/*******************************************************************************
* Copyright (c) 2011 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.kie.eclipse.navigator.view.content;
import org.kie.eclipse.Activator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.wst.server.core.IServer;
import org.kie.eclipse.navigator.view.IKieNavigatorView;
import org.kie.eclipse.server.IKieResourceHandler;
public abstract class ContentNode<T extends IContainerNode<?>> implements IContentNode<T>, IWorkbenchAdapter {
protected IKieResourceHandler handler;
protected IContainerNode<?> parent;
protected final String name;
protected ContentNode(String name) {
this.parent = null;
this.name = name;
}
protected ContentNode(T parent, IKieResourceHandler handler) {
this.parent = parent;
this.name = handler.getName();
this.handler = handler;
}
@Override
public IContainerNode<?> getParent() {
return parent;
}
@Override
public String getName() {
return name;
}
@Override
public IServer getServer() {
if (parent==null)
return ((ServerNode)this).server;
return getRoot().getServer();
}
@Override
public IKieNavigatorView getNavigator() {
try {
if (parent==null)
return ((ServerNode)this).navigator;
return getRoot().getNavigator();
}
catch (Exception e) {
Activator.logError(e.getMessage(), e);
}
return null;
}
@Override
public IContainerNode<?> getRoot() {
if (parent==null)
return (IContainerNode)this;
return parent.getRoot();
}
public String getRuntimeId() {
return getRoot().getRuntimeId();
}
@Override
public void dispose() {
// parent = null;
if (handler!=null) {
handler.dispose();
handler = null;
}
}
@Override
public IKieResourceHandler getHandler() {
return handler;
}
@Override
public boolean isResolved() {
return getHandler()!=null && getHandler().isLoaded();
}
@Override
public Object resolveContent() {
getHandler().load();
return this;
}
@Override
public Object getAdapter(Class adapter) {
if (adapter==IKieResourceHandler.class) {
return getHandler();
}
if (adapter==IWorkbenchAdapter.class) {
return this;
}
return null;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof IContentNode) {
try {
IContentNode<?> other = (IContentNode<?>)obj;
return other.getName().equals(this.getName());
}
catch (Exception ex) {
}
}
return false;
}
@Override
public int compareTo(Object arg0) {
if (arg0 instanceof RepositoryNode) {
if (this instanceof RepositoryNode)
return getName().compareTo(((RepositoryNode)arg0).getName());
return 1;
}
if (this instanceof RepositoryNode) {
if (arg0 instanceof RepositoryNode)
return getName().compareTo(((RepositoryNode)arg0).getName());
return -1;
}
if (arg0 instanceof IContentNode) {
return getName().compareTo(((IContentNode)arg0).getName());
}
return 0;
}
@Override
public synchronized void refresh() {
final IKieNavigatorView navigator = getNavigator();
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
try {
navigator.setProperty(INTERNAL_REFRESH_KEY, Boolean.toString(true));
navigator.refresh(getRoot());
}
finally {
navigator.setProperty(INTERNAL_REFRESH_KEY, Boolean.toString(false));
}
}
});
}
protected static Shell getShell() {
return Display.getDefault().getActiveShell();
}
@Override
public void handleException(final Throwable t) {
t.printStackTrace();
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
MessageDialog.openError(getShell(), "Error", t.getMessage());
}
});
}
@Override
public Object[] getChildren(Object o) {
return null;
}
@Override
public ImageDescriptor getImageDescriptor(Object object) {
return null;
}
@Override
public String getLabel(Object o) {
return getName();
}
@Override
public Object getParent(Object o) {
return getParent();
}
}