/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.metamodels.relational.extension;
import org.eclipse.core.resources.IResource;
import org.eclipse.emf.ecore.EObject;
import org.teiid.core.designer.util.CoreArgCheck;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.extension.EmfModelObjectExtensionAssistant;
import org.teiid.designer.core.workspace.ModelResource;
import org.teiid.designer.core.workspace.ModelUtil;
import org.teiid.designer.extension.ExtensionConstants;
import org.teiid.designer.extension.ExtensionPlugin;
import org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition;
import org.teiid.designer.extension.registry.ModelExtensionRegistry;
import org.teiid.designer.metamodels.core.ModelType;
import org.teiid.designer.metamodels.relational.Procedure;
import org.teiid.designer.metamodels.relational.RelationalPackage;
import org.teiid.designer.metamodels.relational.RelationalPlugin;
import org.teiid.designer.metamodels.relational.extension.RestModelExtensionConstants.PropertyIds;
/**
*
*
* @since 8.0
*/
public class RestModelExtensionAssistant extends EmfModelObjectExtensionAssistant {
/**
* Saves the relational MED to a model if necessary.
* @param model the model being checked (can be <code>null</code>)
* @throws Exception if there is an error applying MED
*/
public void applyMedIfNecessary(final IResource model) throws Exception {
if (model != null) {
final ModelResource modelResource = ModelerCore.getModelWorkspace().findModelResource(model);
if (modelResource != null && !modelResource.isReadOnly()) {
if ((ModelType.VIRTUAL_LITERAL == modelResource.getModelType())
&& RelationalPackage.eNS_URI.equals(modelResource.getPrimaryMetamodelUri()) && !supportsMyNamespace(model)) {
saveModelExtensionDefinition(model);
}
}
}
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.core.extension.EmfModelObjectExtensionAssistant#getPropertyDefinition(java.lang.Object, java.lang.String)
*/
@Override
protected ModelExtensionPropertyDefinition getPropertyDefinition(final Object modelObject,
final String propId) throws Exception {
CoreArgCheck.isInstanceOf(EObject.class, modelObject);
// make sure there is a property definition first
final ModelExtensionPropertyDefinition propDefn = super.getPropertyDefinition(modelObject, propId);
if (propDefn != null) {
// must be procedure in a virtual model
if ((modelObject instanceof Procedure) && ModelUtil.isVirtual(modelObject)) {
boolean isFunction = false;
if( modelObject instanceof Procedure ) {
isFunction = ((Procedure)modelObject).isFunction();
}
if ( !isFunction &&
(PropertyIds.REST_METHOD.equals(propId) ||
PropertyIds.URI.equals(propId) ||
PropertyIds.CHARSET.equals(propId) ||
PropertyIds.HEADERS.equals(propId) ||
PropertyIds.DESCRIPTION.equals(propId))) {
return propDefn;
}
}
}
return null;
}
/**
* {@inheritDoc}
*
* @see org.teiid.designer.core.extension.EmfModelObjectExtensionAssistant#supportsMedOperation(java.lang.String, java.lang.Object)
*/
@Override
public boolean supportsMedOperation(String proposedOperationName,
Object context) {
return ExtensionConstants.MedOperations.SHOW_IN_REGISTRY.equals(proposedOperationName); // only show in registry
}
public static RestModelExtensionAssistant getRestAssistant() {
final ModelExtensionRegistry registry = ExtensionPlugin.getInstance().getRegistry();
final String prefix = RestModelExtensionConstants.NAMESPACE_PROVIDER.getNamespacePrefix();
return (RestModelExtensionAssistant)registry.getModelExtensionAssistant(prefix);
}
public static boolean setRestProperties(EObject procedure, String restMethod, String restUri, String restCharSet, String restHeaders, String restDescription) {
final RestModelExtensionAssistant assistant = getRestAssistant();
if( assistant != null ) {
try {
assistant.setPropertyValue(procedure, RestModelExtensionConstants.PropertyIds.URI, restUri);
assistant.setPropertyValue(procedure, RestModelExtensionConstants.PropertyIds.REST_METHOD, restMethod);
assistant.setPropertyValue(procedure, RestModelExtensionConstants.PropertyIds.CHARSET, restCharSet);
assistant.setPropertyValue(procedure, RestModelExtensionConstants.PropertyIds.HEADERS, restHeaders);
assistant.setPropertyValue(procedure, RestModelExtensionConstants.PropertyIds.DESCRIPTION, restDescription);
} catch (Exception e) {
RelationalPlugin.Util.log(e);
return false;
}
}
return true;
}
public static boolean setRestProperty(EObject procedure, String id, String value) {
final RestModelExtensionAssistant assistant = getRestAssistant();
if( assistant != null ) {
try {
if( RestModelExtensionConstants.PropertyIds.URI.equals(id)) {
assistant.setPropertyValue(procedure, RestModelExtensionConstants.PropertyIds.URI, value);
} else if( RestModelExtensionConstants.PropertyIds.REST_METHOD.equals(id)) {
assistant.setPropertyValue(procedure, RestModelExtensionConstants.PropertyIds.REST_METHOD, value);
} else if( RestModelExtensionConstants.PropertyIds.CHARSET.equals(id)) {
assistant.setPropertyValue(procedure, RestModelExtensionConstants.PropertyIds.CHARSET, value);
} else if( RestModelExtensionConstants.PropertyIds.HEADERS.equals(id)) {
assistant.setPropertyValue(procedure, RestModelExtensionConstants.PropertyIds.HEADERS, value);
} else if( RestModelExtensionConstants.PropertyIds.DESCRIPTION.equals(id)) {
assistant.setPropertyValue(procedure, RestModelExtensionConstants.PropertyIds.DESCRIPTION, value);
}
} catch (Exception e) {
RelationalPlugin.Util.log(e);
return false;
}
}
return true;
}
public static String getRestProperty(EObject procedure, String key) {
String result = null;
final RestModelExtensionAssistant assistant = getRestAssistant();
if( assistant != null ) {
try {
result = assistant.getPropertyValue(procedure, key);
} catch (Exception e) {
RelationalPlugin.Util.log(e);
}
}
return result;
}
}