// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.mdm.repository.core.service.interactive;
import java.util.List;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.talend.core.model.properties.Item;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.mdm.repository.core.IServerObjectRepositoryType;
import org.talend.mdm.repository.core.command.deploy.AbstractDeployCommand;
import org.talend.mdm.repository.core.command.param.ICommandParameter;
import org.talend.mdm.repository.core.service.ModelImpactAnalyseService;
import org.talend.mdm.repository.core.service.ModelImpactAnalyseService.ImpactOperation;
import org.talend.mdm.repository.i18n.Messages;
import org.talend.mdm.repository.model.mdmproperties.MDMServerObjectItem;
import org.talend.mdm.repository.model.mdmproperties.WSDataModelItem;
import org.talend.mdm.repository.model.mdmserverobject.MDMServerObject;
import org.talend.mdm.repository.utils.RepositoryResourceUtil;
import com.amalto.workbench.exadapter.ExAdapterManager;
import com.amalto.workbench.utils.EXtentisObjects;
import com.amalto.workbench.utils.TreeObjectUtil;
import com.amalto.workbench.utils.XtentisException;
import com.amalto.workbench.webservices.TMDMService;
import com.amalto.workbench.webservices.WSDataModel;
import com.amalto.workbench.webservices.WSDataModelPK;
import com.amalto.workbench.webservices.WSDeleteDataModel;
import com.amalto.workbench.webservices.WSPutDataModel;
/**
* DOC hbhong class global comment. Detailled comment
*/
public class DataModelInteractiveHandler extends AbstractInteractiveHandler {
/**
*
*/
private static final String ENCODE = "UTF-8"; //$NON-NLS-1$
/**
*
*/
private static final String FILE_EXTENSION = "xsd"; //$NON-NLS-1$
Logger log = Logger.getLogger(DataModelInteractiveHandler.class);
private IDataModelInteractiveHandlerExAdapter exAdapter;
public DataModelInteractiveHandler() {
this.exAdapter = ExAdapterManager.getAdapter(this, IDataModelInteractiveHandlerExAdapter.class);
}
public ERepositoryObjectType getRepositoryObjectType() {
return IServerObjectRepositoryType.TYPE_DATAMODEL;
}
public String getLabel() {
return Messages.DataModelInteractiveHandler_label;
}
@Override
public boolean doDeployWSObject(TMDMService service, Object wsObj) {
if (wsObj != null) {
service.putDataModel(new WSPutDataModel((WSDataModel) wsObj));
return true;
}
return false;
}
@Override
public Object convert(Item item, MDMServerObject serverObj) {
WSDataModel dataModel = (WSDataModel) super.convert(item, serverObj);
IFile file = RepositoryResourceUtil.findReferenceFile(getRepositoryObjectType(), item, FILE_EXTENSION);
String schema = RepositoryResourceUtil.getTextFileContent(file, ENCODE);
dataModel.setXsdSchema(schema);
return dataModel;
}
@Override
public void assertPropertyIsInited(Item item) {
IFile file = RepositoryResourceUtil.findReferenceFile(getRepositoryObjectType(), item, FILE_EXTENSION);
String schema = RepositoryResourceUtil.getTextFileContent(file, ENCODE);
((WSDataModelItem) item).getWsDataModel().setXsdSchema(schema);
}
@Override
public boolean doRemove(TMDMService service, AbstractDeployCommand cmd) throws XtentisException {
WSDataModelPK pk = new WSDataModelPK();
String name = cmd.getObjName();
pk.setPk(name);
service.deleteDataModel(new WSDeleteDataModel(pk));
TreeObjectUtil.deleteSpecificationFromAttachedRole(service, name, EXtentisObjects.DataMODEL.getName());
return true;
}
@Override
public List<IRepositoryViewObject> getAssociatedObjects(IRepositoryViewObject obj) {
if (exAdapter != null) {
return exAdapter.getAssociatedObjects(obj);
}
return super.getAssociatedObjects(obj);
}
@Override
public boolean deploy(AbstractDeployCommand cmd) throws XtentisException {
IRepositoryViewObject viewObj = cmd.getViewObject();
Item item = viewObj.getProperty().getItem();
MDMServerObject serverObject = ((MDMServerObjectItem) item).getMDMServerObject();
Object wsObj = convert(item, serverObject);
//
ICommandParameter parameter = cmd.getParameter();
if (parameter != null) {
callModelService(cmd);
return true;
} else {
TMDMService service = getService(cmd.getServerDef());
return doDeployWSObject(service, wsObj);
}
}
private void callModelService(AbstractDeployCommand cmd) throws XtentisException {
ICommandParameter parameter = cmd.getParameter();
if (parameter != null) {
ImpactOperation operation = (ImpactOperation) parameter.getParameter();
Boolean force = null;
if (operation == ImpactOperation.APPLY_LOW_CHANGE) {
force = false;
} else if (operation == ImpactOperation.RECREATE_TABLE) {
force = true;
}
ModelImpactAnalyseService.updateModel(cmd.getServerDef(), cmd.getViewObject(), force);
}
}
}