/**
* Դ�������ƣ�RevisionHistoryOverviewBlock.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.uft.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ�sundl
*/
package com.hundsun.ares.studio.ui.editor.blocks;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
import com.hundsun.ares.studio.core.ARESModelException;
import com.hundsun.ares.studio.core.IARESModule;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.core.model.Constants;
import com.hundsun.ares.studio.core.model.CorePackage;
import com.hundsun.ares.studio.core.model.JRESResourceInfo;
import com.hundsun.ares.studio.core.model.ModuleProperty;
import com.hundsun.ares.studio.core.model.RevisionHistory;
import com.hundsun.ares.studio.core.model.util.RevisionHistoryVersion;
import com.hundsun.ares.studio.ui.ColumnSelectSorterListener;
import com.hundsun.ares.studio.ui.CommonElementLabelProvider;
import com.hundsun.ares.studio.ui.editor.actions.IActionIDConstant;
import com.hundsun.ares.studio.ui.editor.actions.RevisionHistroyOverviewCopyAction;
import com.hundsun.ares.studio.ui.editor.editingsupport.TextEditingSupport;
import com.hundsun.ares.studio.ui.editor.viewers.BaseEObjectColumnLabelProvider;
/**
* ��ʷ��¼����ҳ��
* @author sundl
*
*/
public class RevisionHistoryOverviewBlock extends TableViewerBlock {
private CommonElementLabelProvider labelprovider = new CommonElementLabelProvider(null);
private IARESResource resource;
/**
* ���������б��Ԫ��
*/
public static class RevisionHistoryOverviewElement implements Comparable<RevisionHistoryOverviewElement>{
IARESResource resource;
private RevisionHistory revision;
/**
* @return the revision
*/
public RevisionHistory getRevision() {
return revision;
}
public RevisionHistoryOverviewElement(IARESResource resource, RevisionHistory revision) {
this.resource = resource;
this.revision = revision;
}
/* (non-Javadoc)
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
@Override
public int compareTo(RevisionHistoryOverviewElement o) {
if (StringUtils.isEmpty(revision.getModifiedDate()))
return 1;
if (StringUtils.isEmpty(o.revision.getModifiedDate()))
return -1;
try {
int result = revision.getModifiedDate().compareTo(o.revision.getModifiedDate());
if (result == 0) {
RevisionHistoryVersion v1 = new RevisionHistoryVersion(revision.getVersion());
RevisionHistoryVersion v2 = new RevisionHistoryVersion(o.revision.getVersion());
return v1.compareTo(v2);
}
return result;
} catch (Exception e) {
}
return 1;
}
}
static class RevisionHistoryOverviewElementLabelProvider extends BaseEObjectColumnLabelProvider {
public RevisionHistoryOverviewElementLabelProvider(EStructuralFeature attribute) {
super(attribute);
}
@Override
protected EObject getOwner(Object element) {
RevisionHistoryOverviewElement re = (RevisionHistoryOverviewElement) element;
return re.revision;
}
}
public RevisionHistoryOverviewBlock(IARESResource resource) {
this.resource = resource;
}
@Override
protected void createColumns(final TableViewer viewer) {
// ��Դ
{
// ���������
TableViewerColumn column = new TableViewerColumn(viewer, SWT.LEFT);
column.getColumn().setText("���");
column.getColumn().setWidth( 120);
column.getColumn().setMoveable(true);
// ���ñ�ǩ�ṩ��
ColumnLabelProvider provider = new ColumnLabelProvider() {
@Override
public String getText(Object element) {
RevisionHistoryOverviewElement re = (RevisionHistoryOverviewElement) element;
// TASK #8690 ����¼���ܵ�����Ϣ��Ϣ��ʾ��Դ�IJ㼶
if (!re.resource.getType().equals(IARESModule.MODULE_PROPERTY_FILE)) {
IARESModule module = re.resource.getModule();
String location = getModulePath(module);
location = location + "/" + labelprovider.getText(re.resource);
return location;
}
// ������ֶ�������location���ԣ�ֱ����ʾ(�������һ����ģ����������ӵ�)
String location = re.revision.getLocation();
if (!StringUtils.isEmpty(location))
return location;
// ģ������¼�����û�����룬������ҳ����ʾģ���·��
return getModulePath(re.resource.getModule());
}
};
column.setLabelProvider(provider);
column.getColumn().addSelectionListener(new ColumnSelectSorterListener(column, provider));
}
/**��ʱ��*/
{
TableViewerColumn comlumn = new TableViewerColumn(viewer, SWT.LEFT);
comlumn.getColumn().setText("��ʱ��");
comlumn.getColumn().setWidth(130);
RevisionHistoryOverviewElementLabelProvider provider = new RevisionHistoryOverviewElementLabelProvider(CorePackage.Literals.REVISION_HISTORY__MODIFIED_DATE);
//provider.setDiagnosticProvider(problemView);
comlumn.setLabelProvider(provider);
//comlumn.setEditingSupport(new TextEditingSupport(viewer, CorePackage.Literals.REVISION_HISTORY__MODIFIED_DATE));
}
/**���汾*/
{
TableViewerColumn comlumn = new TableViewerColumn(viewer, SWT.LEFT);
comlumn.getColumn().setText("���汾");
comlumn.getColumn().setWidth(160);
RevisionHistoryOverviewElementLabelProvider provider = new RevisionHistoryOverviewElementLabelProvider(CorePackage.Literals.REVISION_HISTORY__VERSION);
//provider.setDiagnosticProvider(problemView);
comlumn.setLabelProvider(provider);
//comlumn.setEditingSupport(new TextEditingSupport(viewer, CorePackage.Literals.REVISION_HISTORY__VERSION));
comlumn.getColumn().setMoveable(true);
}
/**������*/
{
TableViewerColumn comlumn = new TableViewerColumn(viewer, SWT.LEFT);
comlumn.getColumn().setText("������");
comlumn.getColumn().setWidth(160);
RevisionHistoryOverviewElementLabelProvider provider = new RevisionHistoryOverviewElementLabelProvider(CorePackage.Literals.REVISION_HISTORY__ORDER_NUMBER);
//provider.setDiagnosticProvider(problemView);
comlumn.setLabelProvider(provider);
//comlumn.setEditingSupport(new TextEditingSupport(viewer, CorePackage.Literals.REVISION_HISTORY__ORDER_NUMBER));
comlumn.getColumn().setMoveable(true);
}
/**������*/
{
TableViewerColumn comlumn = new TableViewerColumn(viewer, SWT.LEFT);
comlumn.getColumn().setText("������");
comlumn.getColumn().setWidth(100);
RevisionHistoryOverviewElementLabelProvider provider = new RevisionHistoryOverviewElementLabelProvider(CorePackage.Literals.REVISION_HISTORY__MODIFIED_BY);
//provider.setDiagnosticProvider(problemView);
comlumn.setLabelProvider(provider);
//comlumn.setEditingSupport(new TextEditingSupport(viewer, CorePackage.Literals.REVISION_HISTORY__MODIFIED_BY));
comlumn.getColumn().setMoveable(true);
}
/**������*/
{
TableViewerColumn comlumn = new TableViewerColumn(viewer, SWT.LEFT);
comlumn.getColumn().setText("������");
comlumn.getColumn().setWidth(100);
comlumn.setLabelProvider(new RevisionHistoryOverviewElementLabelProvider(CorePackage.Literals.REVISION_HISTORY__CHARGER));
//comlumn.setEditingSupport(new TextEditingSupport(viewer, CorePackage.Literals.REVISION_HISTORY__CHARGER));
comlumn.getColumn().setMoveable(true);
}
/**������*/
{
TableViewerColumn comlumn = new TableViewerColumn(viewer, SWT.LEFT);
comlumn.getColumn().setText("������");
comlumn.getColumn().setWidth(200);
comlumn.setLabelProvider(new RevisionHistoryOverviewElementLabelProvider(CorePackage.Literals.REVISION_HISTORY__MODIFIED));
//comlumn.setEditingSupport(new TextEditingSupport(viewer, CorePackage.Literals.REVISION_HISTORY__MODIFIED));
comlumn.getColumn().setMoveable(true);
}
/**��ԭ��*/
{
TableViewerColumn comlumn = new TableViewerColumn(viewer, SWT.LEFT);
comlumn.getColumn().setText("��ԭ��");
comlumn.getColumn().setWidth(200);
comlumn.setLabelProvider(new RevisionHistoryOverviewElementLabelProvider(CorePackage.Literals.REVISION_HISTORY__MODIFIED_REASON));
//comlumn.setEditingSupport(new TextEditingSupport(viewer, CorePackage.Literals.REVISION_HISTORY__MODIFIED_REASON));
comlumn.getColumn().setMoveable(true);
}
/**��ע*/
{
TableViewerColumn comlumn = new TableViewerColumn(viewer, SWT.LEFT);
comlumn.getColumn().setText("��ע");
comlumn.getColumn().setWidth(200);
RevisionHistoryOverviewElementLabelProvider provider = new RevisionHistoryOverviewElementLabelProvider(CorePackage.Literals.REVISION_HISTORY__COMMENT);
//provider.setDiagnosticProvider(problemView);
comlumn.setLabelProvider(provider);
comlumn.setEditingSupport(new TextEditingSupport(viewer, CorePackage.Literals.REVISION_HISTORY__COMMENT));
comlumn.getColumn().setMoveable(true);
}
viewer.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
IStructuredSelection ss = (IStructuredSelection) viewer.getSelection();
RevisionHistoryOverviewElement element = (RevisionHistoryOverviewElement) ss.getFirstElement();
//JRESUtils.getSuitableEditorDescriptor(element.resource.getResource().getName());
// 2013-1-21 sundl ��������£����ܻ����elementΪ�գ��������֣���ȷʵ�п��ܡ�
if (element == null)
return;
try {
IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), (IFile) element.resource.getResource());
} catch (PartInitException e) {
e.printStackTrace();
}
}
});
}
private String getModulePath(IARESModule module) {
String location = labelprovider.getText(module);
IARESModule parentModule = module.getParentModule();
while (parentModule != null) {
location = labelprovider.getText(parentModule) + "/" + location;
parentModule = parentModule.getParentModule();
}
return location;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#getID()
*/
@Override
protected String getID() {
return getClass().getName();
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#getColumnViewerContentProvider()
*/
@Override
protected IContentProvider getColumnViewerContentProvider() {
return new IStructuredContentProvider() {
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@Override
public Object[] getElements(Object inputElement) {
List<RevisionHistoryOverviewElement> result = new ArrayList<RevisionHistoryOverviewElement>();
IARESModule module = resource.getModule();
IARESResource[] resources = module.getARESResources(true);
for (IARESResource res : resources) {
try {
JRESResourceInfo info = res.getInfo(JRESResourceInfo.class);
if (info == null) {
ModuleProperty mp = res.getInfo(ModuleProperty.class);
if (mp != null) {
info = (JRESResourceInfo) mp.getMap().get(Constants.RevisionHistory.MODULE_REVISION_EXT_KEY);
}
}
if (info != null) {
List<RevisionHistory> histories = info.getHistories();
for (RevisionHistory his : histories) {
result.add(new RevisionHistoryOverviewElement(res, his));
}
}
} catch (ARESModelException e) {
}
}
Collections.sort(result);
// ������ʾ
Collections.reverse(result);
return result.toArray();
}
};
}
@Override
public void setInput(Object input) {
super.setInput(input);
getColumnViewer().getTable().getColumn(0).pack();
getColumnViewer().getTable().getColumn(1).pack();
getColumnViewer().getTable().getColumn(2).pack();
getColumnViewer().getTable().getColumn(4).pack();
getColumnViewer().getTable().getColumn(5).pack();
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#createMenus(org.eclipse.jface.action.IMenuManager)
*/
@Override
protected void createMenus(IMenuManager menuManager) {
IAction action = getActionRegistry().getAction(IActionIDConstant.CV_COPY);
menuManager.add(action);
}
protected void createActions() {
IAction copyAction = new RevisionHistroyOverviewCopyAction(getColumnViewer());
getActionRegistry().registerAction(copyAction);
getSelectionActions().add(copyAction.getId());
};
@Override
protected boolean needButtonGroupArea() {
return false;
}
}