// ============================================================================
//
// 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.dataprofiler.core.ui.editor;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IPersistableElement;
import org.eclipse.ui.ide.ResourceUtil;
import org.talend.core.model.properties.Item;
import org.talend.cwm.helper.ResourceHelper;
import org.talend.dq.helper.EObjectHelper;
import org.talend.dq.helper.PropertyHelper;
import org.talend.repository.model.IRepositoryNode;
import orgomg.cwm.objectmodel.core.ModelElement;
/**
*
* DOC mzhao Abstract editor input for TDQ items.
*/
public abstract class AbstractItemEditorInput implements IEditorInput {
/**
* note: ONLY used for MDM team to open matchrule editor, because they only can get item, didn't have IRepositoryNode
*/
protected Item item = null;
/**
* note: ONLY used for MDM team to open matchrule editor, because they only can get item, didn't have IRepositoryNode.
*
* @param tdqItem
*/
public AbstractItemEditorInput(Item tdqItem) {
this.item = tdqItem;
}
/**
* note: for DQ team, use this AbstractItemEditorInput constructor.
*
* @param repNode
*/
public AbstractItemEditorInput(IRepositoryNode repNode) {
setRepNode(repNode);
}
public boolean exists() {
return false;
}
public ImageDescriptor getImageDescriptor() {
return null;
}
public String getName() {
return getPath() + getModel().getName();
}
public String getToolTipText() {
return getPath() + getModel().getName();
}
public IPersistableElement getPersistable() {
return null;
}
public Object getAdapter(Class adapter) {
if (adapter.equals(IFile.class)) {
return PropertyHelper.getItemFile(getItem().getProperty());
}
return null;
}
public String getPath() {
return getItem().getState().getPath() + "/";//$NON-NLS-1$
}
@Override
public boolean equals(Object obj) {
if (obj instanceof AbstractItemEditorInput) {
AbstractItemEditorInput other = (AbstractItemEditorInput) obj;
boolean isEqualsId = getItem().getProperty().getId().equals(other.getItem().getProperty().getId());
if (isEqualsId) {
if (StringUtils.equals(getName(), other.getName())) {
if (getItem().getProperty().getVersion().equals(other.getItem().getProperty().getVersion())) {
return true;
}
}
} else {
return false;
}
} else if (obj instanceof IFileEditorInput) {
IFile newFile = ResourceUtil.getFile(this);
if (newFile != null) {
return newFile.equals(ResourceUtil.getFile(obj));
}
}
return false;
}
@Override
public int hashCode() {
return super.hashCode();
}
public Item getItem() {
Item item = getRepNode().getObject().getProperty().getItem();
item = (Item) EObjectHelper.resolveObject(item);
return item;
}
/**
* get current RepNode.
*
* @return
*/
public abstract IRepositoryNode getRepNode();
public abstract void setRepNode(IRepositoryNode node);
/**
* get the Model in the RepNode. for example: anaRepNode return its getAnalysis(), etc.
*
* @return
*/
public abstract ModelElement getModel();
/**
* get the Uuid of the ModelElement which included in this IEditorInput.
*
* @return
*/
public String getModelElementUuid() {
if (getRepNode() != null) {
return ResourceHelper.getUUID(getModel());
}
return null;
}
}