package org.kie.eclipse.navigator.preferences;
import java.io.IOException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.kie.eclipse.navigator.view.content.IContainerNode;
import org.kie.eclipse.server.IKieOrganizationHandler;
import org.kie.eclipse.server.IKieProjectHandler;
import org.kie.eclipse.server.IKieRepositoryHandler;
import org.kie.eclipse.server.IKieResourceHandler;
import org.kie.eclipse.server.IKieServiceDelegate;
import com.eclipsesource.json.JsonObject;
public abstract class AbstractKieJsonPropertyPage extends AbstractKiePropertyPage {
protected IPreferenceStore preferenceStore;
protected JsonObject properties;
public AbstractKieJsonPropertyPage() {
super(GRID);
}
@Override
protected String getPreferenceName(String name) {
return name;
}
@Override
public IPreferenceStore getPreferenceStore() {
if (preferenceStore==null) {
properties = new JsonObject(getResourceHandler().getProperties());
preferenceStore = new JsonPreferenceStore(properties);
}
return preferenceStore;
}
@Override
protected void performDefaults() {
properties.copyFrom(getResourceHandler().getProperties());
super.performDefaults();
}
@Override
public boolean performOk() {
boolean rtn = super.performOk();
if (rtn) {
JsonObject oldProperties = getResourceHandler().getProperties();
if (!properties.equals(oldProperties)) {
String oldName = getResourceHandler().getName();
getResourceHandler().setProperties(properties);
// update the values on the server
IKieResourceHandler handler = getResourceHandler();
IKieServiceDelegate delegate = handler.getDelegate();
try {
if (handler instanceof IKieOrganizationHandler) {
delegate.updateOrganization(oldName, (IKieOrganizationHandler)handler);
}
else if (handler instanceof IKieRepositoryHandler) {
delegate.updateRepository(oldName, (IKieRepositoryHandler)handler);
}
if (handler instanceof IKieProjectHandler) {
delegate.updateProject(oldName, (IKieProjectHandler)handler);
}
IContainerNode<?> container = (IContainerNode<?>)getContentNode().getParent();
container.refresh();
}
catch (IOException e) {
e.printStackTrace();
getResourceHandler().setProperties(oldProperties);
MessageDialog.openError(getShell(), "Error", e.getMessage());
}
}
}
return rtn;
}
}