/** * Դ�������ƣ�RevisionHistoryOverviewBlock.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.uft.ui * ����˵����$desc * ����ĵ��� * ���ߣ�sundl */ package com.hundsun.ares.studio.jres.clearinghouse.ui; 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.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.ICommonModel; 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.core.util.ARESElementUtil; import com.hundsun.ares.studio.jres.model.chouse.RevisionHistoryProperty; import com.hundsun.ares.studio.jres.model.database.TableResourceData; import com.hundsun.ares.studio.ui.ColumnSelectSorterListener; import com.hundsun.ares.studio.ui.editor.blocks.TableViewerBlock; 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 IARESResource resource; /** * ���������б��Ԫ�� */ static class RevisionHistoryOverviewElement implements Comparable<RevisionHistoryOverviewElement>{ IARESResource resource; RevisionHistory revision; public RevisionHistoryOverviewElement(IARESResource resource, RevisionHistory revision) { this.resource = resource; this.revision = revision; } public RevisionHistory getRevision() { return 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; } @Override public String getText(Object element) { EStructuralFeature attribute = getEStructuralFeature(element); if (CorePackage.Literals.REVISION_HISTORY__MODIFIED == attribute && element instanceof RevisionHistoryOverviewElement) { RevisionHistory revHis = ((RevisionHistoryOverviewElement) element).getRevision(); if (isDatabaseTableRevHis(revHis)) { RevisionHistoryProperty property = (RevisionHistoryProperty) revHis.getData2().get("Stock3"); if (property != null) { return property.getActionDescription(); } } } return super.getText(element); } } private static boolean isDatabaseTableRevHis(EObject rev){ if (rev == null || rev.eContainer() == null) { return false; } if (rev.eContainer() instanceof TableResourceData) { return true; }else { return isDatabaseTableRevHis(rev.eContainer()); } } 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; try { ICommonModel model = ARESElementUtil.getCommonModel(re.resource.getInfo(Object.class)); if (model != null) return model.getString(ICommonModel.CNAME); } catch (ARESModelException e) { e.printStackTrace(); } return re.resource.getName(); } }; 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()); if (element == null) { return; } try { IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), (IFile) element.resource.getResource()); } catch (PartInitException e) { e.printStackTrace(); } } }); } /* (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) { } @Override protected boolean needButtonGroupArea() { return false; } }