// ============================================================================
//
// 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 com.amalto.workbench.widgets.celleditor;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import com.amalto.workbench.dialogs.datamodel.SelectXPathDialog;
import com.amalto.workbench.models.infoextractor.IAllDataModelHolder;
public class XPathCellEditor extends EditableDialogCellEditor {
public interface IXPathUpdate {
public String updateXPath(String xpath);
}
private IAllDataModelHolder allDataModelHolder;
private IXPathUpdate xpathUpdate = null;
private boolean lock;
private IXPathValidator defaultXPathValidator = new DefaultXPathValidator();
public XPathCellEditor(Composite parent, IAllDataModelHolder allDataModelHolder) {
super(parent);
this.allDataModelHolder = allDataModelHolder;
}
public XPathCellEditor(Composite parent, IAllDataModelHolder allDataModelHolder, IXPathUpdate xpathUpdate) {
this(parent, allDataModelHolder);
this.xpathUpdate = xpathUpdate;
}
public void setXPathValidator(IXPathValidator validator) {
if (validator != null) {
defaultXPathValidator = validator;
}
}
public IAllDataModelHolder getAllDataModelHolder() {
return allDataModelHolder;
}
public void setAllDataModelHolder(IAllDataModelHolder allDataModelHolder) {
if (allDataModelHolder == null) {
return;
}
this.allDataModelHolder = allDataModelHolder;
}
@Override
protected Object openDialogBox(Control cellEditorWindow) {
SelectXPathDialog dialog = new SelectXPathDialog(cellEditorWindow.getShell(), allDataModelHolder,
allDataModelHolder.getDefaultDataModel(), allDataModelHolder.getDefaultEntity());
if (dialog.open() != Window.OK) {
return null;
}
dialog.setLock(lock);
String xpath = dialog.getSelectedXPath();
if (xpathUpdate != null) {
return xpathUpdate.updateXPath(xpath);
}
return xpath;
}
public boolean isLock() {
return lock;
}
public void setLock(boolean lock) {
this.lock = lock;
}
@Override
protected boolean validate() {
String newValue = txtEdit.getText().trim();
return defaultXPathValidator.validate(newValue);
}
@Override
protected void restoreValue() {
updateContents(doGetValue());
}
}