/*******************************************************************************
* Copyright (c) 2004, 2007 Boeing.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.xviewer;
import java.util.Collection;
import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.nebula.widgets.xviewer.core.model.XViewerAlign;
import org.eclipse.nebula.widgets.xviewer.core.model.SortDataType;
import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;
import org.eclipse.nebula.widgets.xviewer.util.internal.XViewerLog;
/**
* @author Donald G. Dunne
*/
public abstract class XViewerComputedColumn extends XViewerValueColumn {
protected XViewerColumn sourceXViewerColumn;
protected XViewer xViewer;
private final Pattern idPattern = Pattern.compile("^.*\\((.*?)\\)$");
public XViewerComputedColumn(String id, String name, int width, XViewerAlign align, boolean show, SortDataType sortDataType, boolean multiColumnEditable, String description) {
super(id, name, width, align, show, sortDataType, multiColumnEditable, description);
}
public XViewerComputedColumn(XViewer viewer, String xml) {
super(viewer, xml);
}
public XViewerColumn getSourceXViewerColumn() {
return sourceXViewerColumn;
}
public void setSourceXViewerColumn(XViewerColumn sourceXViewerColumn) {
this.sourceXViewerColumn = sourceXViewerColumn;
id = getId();
name = getName();
}
public String getSourceColumnId() {
if (sourceXViewerColumn != null) {
return sourceXViewerColumn.getId();
}
Matcher matcher = idPattern.matcher(id);
if (matcher.find()) {
return matcher.group(1);
}
return null;
}
public void setSourceXViewerColumnFromColumns(Collection<XViewerColumn> xViewerColumns) {
String sourceColumnId = getSourceColumnId();
if (sourceColumnId == null) {
XViewerLog.log(Activator.class, Level.SEVERE, "Invalid null sourceColumnId");
return;
}
for (XViewerColumn xCol : xViewerColumns) {
if (xCol.getId().equals(sourceColumnId)) {
setSourceXViewerColumn(xCol);
return;
}
}
XViewerLog.log(Activator.class, Level.SEVERE,
String.format("Can't resolve sourceColumn for XViewerComputedColumn [%s]", this));
}
public abstract boolean isApplicableFor(XViewerColumn xViewerColumn);
public abstract boolean isApplicableFor(String storedId);
public abstract XViewerComputedColumn createFromStored(XViewerColumn storedColumn);
@Override
public XViewer getXViewer() {
return xViewer;
}
@Override
public void setXViewer(Object xViewer) {
this.xViewer = (XViewer) xViewer;
}
@Override
public abstract XViewerComputedColumn copy();
}