// ============================================================================
//
// 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.ui.dialogs;
import java.net.URL;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.widgets.Shell;
import org.talend.core.model.properties.ItemState;
import org.talend.core.model.properties.Project;
import org.talend.core.model.properties.Property;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.mdm.repository.core.IServerObjectRepositoryType;
import org.talend.mdm.repository.core.service.RepositoryQueryService;
import org.talend.mdm.repository.core.service.RepositoryWebServiceAdapter;
import org.talend.mdm.repository.model.mdmmetadata.MDMServerDef;
import org.talend.mdm.repository.utils.RepositoryResourceUtil;
import org.talend.mdm.workbench.serverexplorer.ui.dialogs.SelectServerDefDialog;
import org.talend.repository.ProjectManager;
import com.amalto.workbench.dialogs.SelectImportedModulesDialog;
import com.amalto.workbench.models.TreeObject;
import com.amalto.workbench.utils.XtentisException;
import com.amalto.workbench.webservices.TMDMService;
/**
* DOC Administrator class global comment. Detailled comment
*/
public class SelectImportedModulesDialog2 extends SelectImportedModulesDialog {
MDMServerDef serverDef;
public SelectImportedModulesDialog2(Shell parentShell, TreeObject treeObj, String title) {
super(parentShell, treeObj, title);
}
@Override
protected TMDMService getPort() throws XtentisException {
SelectServerDefDialog dialog = new SelectServerDefDialog(getShell());
if (dialog.open() == IDialogConstants.OK_ID) {
MDMServerDef serverDef = dialog.getSelectedServerDef();
this.serverDef = serverDef;
return RepositoryWebServiceAdapter.getMDMService(serverDef);
}
return null;
}
@Override
protected boolean resolveSchemaList(List<String> schemaList) throws XtentisException {
List<String> newList = RepositoryQueryService.findAllDataModelNames();
for (String string : newList) {
schemaList.add(string);
}
return true;
}
@Override
public URL getSourceURL(String path) {
if (null == path) {
return null;
}
if (path.startsWith("type:")) { //$NON-NLS-1$
String modelName = path.substring(5);
IRepositoryViewObject rvobject = RepositoryResourceUtil.findViewObjectByName(
IServerObjectRepositoryType.TYPE_DATAMODEL, modelName);
if (null == rvobject) {
return null;
}
String prjLabel = rvobject.getProjectLabel();
String parentPath = buildParentPath(rvobject);
if (!parentPath.startsWith("/")) { //$NON-NLS-1$
parentPath = "/" + parentPath; //$NON-NLS-1$
}
String sep = "" + IPath.SEPARATOR; //$NON-NLS-1$
IPath plocation = getProjectLocation(rvobject);
String fileName = "file:///" + plocation.toOSString() + sep //$NON-NLS-1$
+ prjLabel.toUpperCase() + sep
+ "MDM" + sep + "datamodel" + parentPath + rvobject.getLabel() + "_" + rvobject.getVersion() + ".xsd"; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$
return super.getSourceURL(fileName);
} else {
return super.getSourceURL(path);
}
}
private String buildParentPath(IRepositoryViewObject viewObj) {
String path = "" + IPath.SEPARATOR; //$NON-NLS-1$
ItemState state = viewObj.getProperty().getItem().getState();
String itemPath = state.getPath();
if (!itemPath.isEmpty()) {
path = itemPath + path;
}
return path;
}
private IPath getProjectLocation(IRepositoryViewObject viewObj) {
Property property = viewObj.getProperty();
Project project = ProjectManager.getInstance().getProject(property);
IProject eclipseProject = ResourcesPlugin.getWorkspace().getRoot().getProject(project.getTechnicalLabel());
IPath location = eclipseProject.getLocation().removeLastSegments(1);
return location;
}
}