/** * This file is part of Archiv-Editor. * * The software Archiv-Editor serves as a client user interface for working with * the Person Data Repository. See: pdr.bbaw.de * * The software Archiv-Editor was developed at the Berlin-Brandenburg Academy * of Sciences and Humanities, Jägerstr. 22/23, D-10117 Berlin. * www.bbaw.de * * Copyright (C) 2010-2013 Berlin-Brandenburg Academy * of Sciences and Humanities * * The software Archiv-Editor was developed by @author: Christoph Plutte. * * Archiv-Editor is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Archiv-Editor is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Archiv-Editor. * If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>. */ package org.bbaw.pdr.ae.view.main.views; import java.util.HashMap; import java.util.Observable; import java.util.Observer; import java.util.Vector; import org.bbaw.pdr.ae.common.AEConstants; import org.bbaw.pdr.ae.common.CommonActivator; import org.bbaw.pdr.ae.common.NLMessages; import org.bbaw.pdr.ae.common.icons.IconsInternal; import org.bbaw.pdr.ae.common.interfaces.AEFilter; import org.bbaw.pdr.ae.control.comparator.ReferenceByAuthorTitleComparator; import org.bbaw.pdr.ae.control.comparator.ReferenceByCreatorComparator; import org.bbaw.pdr.ae.control.comparator.ReferenceByRecentChangesComparator; import org.bbaw.pdr.ae.control.comparator.ReferenceByTitleComparator; import org.bbaw.pdr.ae.control.comparator.ReferenceCronComparator; import org.bbaw.pdr.ae.control.facade.Facade; import org.bbaw.pdr.ae.control.facade.RightsChecker; import org.bbaw.pdr.ae.metamodel.PdrId; import org.bbaw.pdr.ae.model.Aspect; import org.bbaw.pdr.ae.model.PdrObject; import org.bbaw.pdr.ae.model.Person; import org.bbaw.pdr.ae.model.ReferenceMods; import org.bbaw.pdr.ae.model.view.OrderingHead; import org.bbaw.pdr.ae.view.control.ControlExtensions; import org.bbaw.pdr.ae.view.control.PDRObjectsProvider; import org.bbaw.pdr.ae.view.control.PDROrdererFactory; import org.bbaw.pdr.ae.view.control.ViewHelper; import org.bbaw.pdr.ae.view.control.filters.OnlyNewPDRObjectsFilter; import org.bbaw.pdr.ae.view.control.filters.OnlyUpdatedPDRObjectsFilter; import org.bbaw.pdr.ae.view.control.interfaces.IReferencePresentation; import org.bbaw.pdr.ae.view.main.dialogs.FilterSelectionDialog; import org.bbaw.pdr.ae.view.main.internal.Activator; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.NotEnabledException; import org.eclipse.core.commands.NotHandledException; import org.eclipse.core.commands.common.NotDefinedException; import org.eclipse.core.runtime.ILog; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IActionBars; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.part.ViewPart; /** * This ViewClass creates the ReferenceCatView of the Aspects of the current * Person. it extends AbstractCatView. The List of Categories is still static * and based upon the List given in the properties file. ReferenceCatView . * @author Christoph Plutte */ public class ReferenceCatView extends ViewPart implements ISelectionListener, Observer, ISelectionProvider { /** The concurring. */ private boolean _concurring = false; /** The additional. */ private boolean _additional = false; /** The all references. */ private Text _allReferences; private ReferenceMods _selectedReference; /** The order combo. */ private Combo _orderCombo; /** The order button. */ private Button _orderButton; /** The sorted combo. */ private Combo _sortedCombo; /** The sort button desc. */ private Button _sortButtonDesc; /** The sort button asc. */ private Button _sortButtonAsc; /** The current ref category id. */ private int _currentRefCategoryId; /** The semantic filter action. */ private Action _openAspectsInNewTap, _openReferencesInNewTap, _onlyNewReferencesAction, _onlyUpdatedReferencesAction, _userFilterAction, _semanticFilterAction; /** The only updated references filter. */ private AEFilter _onlyNewReferencesFilter, _onlyUpdatedReferencesFilter; /** The root menu manager. */ private IMenuManager _rootMenuManager; /** The references. */ private Vector<ReferenceMods> _references; /** The _main composite. */ private Composite _mainComposite; /** The _tab folder ref. */ private CTabFolder _tabFolderRef; /** The parent shell. */ private Shell _parentShell; // private CTabItem selectetTi; /** hashmap for tabitems and semantic categories in category view. */ private HashMap<Integer, CTabItem> _tabMap = new HashMap<Integer, CTabItem>(AEConstants.MAX_NUMBER_CATEGORIES); /** * id of category view. */ public static final String ID = "org.bbaw.pdr.ae.view.main.views.ReferenceCatView"; //$NON-NLS-1$ /** The _current objects. */ private PdrObject[] _currentObjects; /** __facade singleton instance. */ private Facade _facade = Facade.getInstanz(); /** Instance of shared image registry. */ private ImageRegistry _imageReg = CommonActivator.getDefault().getImageRegistry(); /** Logger. */ private static ILog iLogger = AEConstants.ILOGGER; /** The pdr objects provider. */ private PDRObjectsProvider _pdrObjectsProvider = new PDRObjectsProvider(); /** The _orderer factory. */ private PDROrdererFactory _ordererFactory = new PDROrdererFactory(); private boolean _advanced = Platform.getPreferencesService().getBoolean(CommonActivator.PLUGIN_ID, "AE_ADVANCED_VERSION", AEConstants.AE_ADVANCED_VERSION, null); /** * constructor. */ public ReferenceCatView() { } @Override public void addSelectionChangedListener(ISelectionChangedListener listener) { // TODO Auto-generated method stub } /** * method to build Categories. * @param pdrObjects the currently selected PDRObjects * @param savedReference the just saved reference or null */ public final void buildCategories(final PdrObject[] pdrObjects, final ReferenceMods savedReference) { _currentObjects = pdrObjects; if (_tabMap != null) { _tabMap.clear(); _tabMap = null; } _tabFolderRef = new CTabFolder(_mainComposite, SWT.NONE); _tabFolderRef.setLayoutData(new GridData()); ((GridData) _tabFolderRef.getLayoutData()).horizontalAlignment = SWT.FILL; ((GridData) _tabFolderRef.getLayoutData()).verticalAlignment = SWT.FILL; ((GridData) _tabFolderRef.getLayoutData()).grabExcessHorizontalSpace = true; ((GridData) _tabFolderRef.getLayoutData()).grabExcessVerticalSpace = true; _tabMap = new HashMap<Integer, CTabItem>(AEConstants.MAX_NUMBER_CATEGORIES); ScrolledComposite scrollComp; Composite contentComp; GridLayout layout; CTabItem tabItem; final Vector<OrderingHead> groupedReferences = _pdrObjectsProvider.getArrangedReferences(); if (_advanced) { if (_currentObjects != null) { _allReferences.setText("" + _pdrObjectsProvider.getNumberOfReferences()); //$NON-NLS-1$ _sortedCombo.setEnabled(true); _orderButton.setEnabled(true); _orderCombo.setEnabled(true); } } int start = 0; if (groupedReferences != null && !groupedReferences.isEmpty()) { for (int i = 0; i < groupedReferences.size(); i++) { if (groupedReferences.get(i).getReferences() != null && !groupedReferences.get(i).getReferences().isEmpty()) { tabItem = new CTabItem(_tabFolderRef, SWT.NONE); tabItem.setText(groupedReferences.get(i).getLabel()); // System.out.println(tabItem); tabItem.setData("id", groupedReferences.get(i).getValue()); //$NON-NLS-1$ tabItem.setData("nr", i); //$NON-NLS-1$ tabItem.setData("loaded", "false"); //$NON-NLS-1$ //$NON-NLS-2$ tabItem.setImage(_imageReg.get(groupedReferences.get(i).getImageString())); _tabMap.put(i, tabItem); // System.out.println(tabMap.get(i)); // System.out.println("tabmap hast mapping für " // + i + " ??: " + tabMap.containsKey(i)); //$NON-NLS-1$ //$NON-NLS-2$ scrollComp = new ScrolledComposite(_tabFolderRef, SWT.V_SCROLL | SWT.H_SCROLL); scrollComp.setExpandHorizontal(true); scrollComp.setExpandVertical(true); scrollComp.setMinSize(SWT.DEFAULT, SWT.DEFAULT); ViewHelper.accelerateScrollbar(scrollComp, 20); layout = new GridLayout(); layout.numColumns = 1; layout.verticalSpacing = 2; scrollComp.setLayout(layout); contentComp = new Composite(scrollComp, SWT.NONE); contentComp.setLayout(layout); scrollComp.setContent(contentComp); // contentComp.setLayoutData(new // GridData(GridData.FILL_BOTH)); tabItem.setControl(scrollComp); } // for-loop } if (savedReference != null) { _currentRefCategoryId = 0; _tabFolderRef.setSelection(0); Vector<Aspect> as = groupedReferences.get(0).getAspects(); for (int k = 0; k < as.size(); k++) { if (as.get(k).getPdrId().equals(savedReference.getPdrId())) { start = k; break; } } } _tabFolderRef.setSelection(0); _currentRefCategoryId = 0; _tabFolderRef.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent se) { IStatus stabfolder = new Status(IStatus.INFO, Activator.PLUGIN_ID, "ReferenceCatView tab item selected: " //$NON-NLS-1$ + _tabFolderRef.getSelection().getText()); iLogger.log(stabfolder); _currentRefCategoryId = _tabFolderRef.getSelectionIndex(); IStatus sCat = new Status(IStatus.INFO, Activator.PLUGIN_ID, "ReferenceCatView current Category: " //$NON-NLS-1$ + _currentRefCategoryId); iLogger.log(sCat); // selectetTi = // _tabFolderRef.getItem(_tabFolderRef.getSelectionIndex()); if (_tabFolderRef.getSelectionIndex() != 0 && !_tabMap.get(_currentRefCategoryId).getData("loaded").equals("true")) //$NON-NLS-1$ //$NON-NLS-2$ { loadReferences(groupedReferences, _currentRefCategoryId, 0, 10, null); } } }); // SelectionListener _tabFolderRef.setSelection(0); if (_tabMap.containsKey(_currentRefCategoryId)) { loadReferences(groupedReferences, _currentRefCategoryId, start, 10, savedReference); } else if (_tabMap.containsKey(0)) { loadReferences(groupedReferences, 0, start, 10, savedReference); } // loadReferences(0, 0, 10); } else { // System.out.println("no categories"); //$NON-NLS-1$ Label noCatLabel = new Label(_tabFolderRef, SWT.None); noCatLabel.setText(NLMessages.getString("View_message_no_references_found")); noCatLabel.pack(); } _tabFolderRef.layout(); _tabFolderRef.pack(); _mainComposite.layout(); } // buildCategories /** * Creates the actions. */ private void createActions() { _onlyNewReferencesAction = new Action(NLMessages.getString("View_action_only_new_references")) { @Override public void run() { updateFilter(_onlyNewReferencesAction); } }; _onlyNewReferencesAction.setChecked(false); _onlyNewReferencesAction.setEnabled(false); _onlyNewReferencesAction.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.DECORATION_NEW)); _onlyUpdatedReferencesAction = new Action(NLMessages.getString("View_action_only_updated_references")) { @Override public void run() { updateFilter(_onlyUpdatedReferencesAction); } }; _onlyUpdatedReferencesAction.setChecked(false); _onlyUpdatedReferencesAction.setEnabled(false); _onlyUpdatedReferencesAction.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.DECORATION_UPDATED)); _semanticFilterAction = new Action(NLMessages.getString("View_action_semantic_filter")) { @Override public void run() { IWorkbench workbench = PlatformUI.getWorkbench(); Display display = workbench.getDisplay(); Shell shell = new Shell(display); FilterSelectionDialog dialog = new FilterSelectionDialog(shell, _pdrObjectsProvider, "semantic"); //$NON-NLS-1$ dialog.open(); if (dialog.getReturnCode() == 0) { disposeTabItems(); buildCategories(_currentObjects, null); } _semanticFilterAction.setChecked(_pdrObjectsProvider.hasSemanticFilter()); } }; _semanticFilterAction.setChecked(false); _semanticFilterAction.setEnabled(false); _semanticFilterAction.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.CLASSIFICATIONS)); _userFilterAction = new Action(NLMessages.getString("View_action_user_filter")) { @Override public void run() { // System.out.println("open user filter"); //$NON-NLS-1$ IWorkbench workbench = PlatformUI.getWorkbench(); Display display = workbench.getDisplay(); Shell shell = new Shell(display); FilterSelectionDialog dialog = new FilterSelectionDialog(shell, _pdrObjectsProvider, "userRef"); //$NON-NLS-1$ dialog.open(); if (dialog.getReturnCode() == 0) { disposeTabItems(); buildCategories(_currentObjects, null); } _userFilterAction.setChecked(_pdrObjectsProvider.hasUserFilter()); } }; _userFilterAction.setChecked(false); _userFilterAction.setEnabled(false); _userFilterAction.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.USER)); } /** * Creates the context menu. * @param control the control */ protected final void createContextMenu(final Control control) { /* Context Menu */ // Menu contextMenu = new Menu(stext); MenuManager menuMgr = new MenuManager(); Menu contextMenu = menuMgr.createContextMenu(control); SelectionAdapter contextMenuSelectionListener = new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent event) { MenuItem source = (MenuItem) event.getSource(); if ("".equals(source.getText())) //$NON-NLS-1$ { _facade.setCurrentCopiedAspect(); } } }; menuMgr.add(_openAspectsInNewTap); menuMgr.add(_openReferencesInNewTap); menuMgr.add(new Separator()); MenuItem menuOpenAspects = new MenuItem(contextMenu, SWT.PUSH); menuOpenAspects.setText(""); //$NON-NLS-1$ menuOpenAspects.addSelectionListener(contextMenuSelectionListener); MenuItem menuItemCopyAspect = new MenuItem(contextMenu, SWT.PUSH); menuItemCopyAspect.setText(""); //$NON-NLS-1$ menuItemCopyAspect.addSelectionListener(contextMenuSelectionListener); MenuItem menuItemCopyText = new MenuItem(contextMenu, SWT.PUSH); menuItemCopyText.setText(NLMessages.getString("View_copyText")); //$NON-NLS-1$ menuItemCopyText.addSelectionListener(contextMenuSelectionListener); control.setMenu(contextMenu); getSite().registerContextMenu(menuMgr, ReferenceCatView.this); } /** * Creates the context menu action. */ private void createContextMenuAction() { _openAspectsInNewTap = new Action(NLMessages.getString("View_action_open_aspects_new_tab")) { @Override public void run() { ReferenceMods r = _facade.getCurrentReference(); if (r != null && r.getPdrId() != null) { Event event = new Event(); event.data = r.getPdrId().toString(); IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench().getService( IHandlerService.class); try { handlerService.executeCommand( "org.bbaw.pdr.ae.view.main.commands.OpenAdditionalAspectsView", event); //$NON-NLS-1$ } catch (ExecutionException e) { e.printStackTrace(); } catch (NotDefinedException e) { e.printStackTrace(); } catch (NotEnabledException e) { e.printStackTrace(); } catch (NotHandledException e) { e.printStackTrace(); } } _openAspectsInNewTap.setChecked(false); } }; _openAspectsInNewTap.setChecked(false); _openAspectsInNewTap.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.ASPECTS)); _openReferencesInNewTap = new Action(NLMessages.getString("View_action_open_references_new_tab")) { @Override public void run() { ReferenceMods r = _facade.getCurrentReference(); if (r != null && r.getPdrId() != null) { Event event = new Event(); event.data = r.getPdrId().toString(); IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench().getService( IHandlerService.class); try { handlerService.executeCommand( "org.bbaw.pdr.ae.view.main.commands.OpenAdditionalReferencesView", event); //$NON-NLS-1$ } catch (ExecutionException e) { e.printStackTrace(); } catch (NotDefinedException e) { e.printStackTrace(); } catch (NotEnabledException e) { e.printStackTrace(); } catch (NotHandledException e) { e.printStackTrace(); } } _openReferencesInNewTap.setChecked(false); } }; _openReferencesInNewTap.setChecked(false); _openReferencesInNewTap.setImageDescriptor(_imageReg.getDescriptor(IconsInternal.REFERENCES)); } /** * Creates the filters. */ private void createFilters() { // COMEBACK createFiltersAndSorters _onlyNewReferencesFilter = new OnlyNewPDRObjectsFilter(); _onlyUpdatedReferencesFilter = new OnlyUpdatedPDRObjectsFilter(); } /** * Creates the menus. */ private void createMenus() { _rootMenuManager = getViewSite().getActionBars().getMenuManager(); _rootMenuManager.setRemoveAllWhenShown(true); _rootMenuManager.addMenuListener(new IMenuListener() { @Override public void menuAboutToShow(final IMenuManager mgr) { fillMenu(mgr); } }); fillMenu(_rootMenuManager); getViewSite().getActionBars().getToolBarManager().add(_onlyNewReferencesAction); getViewSite().getActionBars().getToolBarManager().add(_userFilterAction); getViewSite().getActionBars().getToolBarManager().add(_semanticFilterAction); getViewSite().getActionBars().updateActionBars(); } @Override public final void createPartControl(final Composite parent) { String secId = this.getViewSite().getSecondaryId(); if (secId != null) { _concurring = (secId.equals("b")); //$NON-NLS-1$ } if (_mainComposite == null) { _mainComposite = new Composite(parent, SWT.NULL); _mainComposite.setLayoutData(new GridData()); ((GridData) _mainComposite.getLayoutData()).horizontalAlignment = SWT.FILL; ((GridData) _mainComposite.getLayoutData()).verticalAlignment = SWT.FILL; ((GridData) _mainComposite.getLayoutData()).grabExcessHorizontalSpace = true; ((GridData) _mainComposite.getLayoutData()).grabExcessVerticalSpace = true; _mainComposite.setLayout(new GridLayout()); _mainComposite.layout(); _mainComposite.pack(); } if (_advanced) { Composite topComposite = new Composite(_mainComposite, SWT.NONE); topComposite.setLayoutData(new GridData()); ((GridData) topComposite.getLayoutData()).horizontalAlignment = SWT.FILL; ((GridData) topComposite.getLayoutData()).grabExcessHorizontalSpace = true; ((GridData) topComposite.getLayoutData()).widthHint = 20; topComposite.setLayout(new RowLayout()); Composite alltitleComp = new Composite(topComposite, SWT.NONE); alltitleComp.setLayout(new GridLayout()); ((GridLayout) alltitleComp.getLayout()).numColumns = 2; ((GridLayout) alltitleComp.getLayout()).marginHeight = 6; ((GridLayout) alltitleComp.getLayout()).marginWidth = 0; Label all = new Label(alltitleComp, SWT.NONE); all.setText(NLMessages.getString("View_number_of_references")); _allReferences = new Text(alltitleComp, SWT.NONE | SWT.READ_ONLY); _allReferences.setLayoutData(new GridData()); ((GridData) _allReferences.getLayoutData()).widthHint = 40; Composite ordertitleComp = new Composite(topComposite, SWT.NONE); ordertitleComp.setLayout(new GridLayout()); ((GridLayout) ordertitleComp.getLayout()).numColumns = 3; ((GridLayout) ordertitleComp.getLayout()).marginHeight = 0; ((GridLayout) ordertitleComp.getLayout()).marginWidth = 0; Label order = new Label(ordertitleComp, SWT.NONE); order.setText(NLMessages.getString("View_group_by")); _orderCombo = new Combo(ordertitleComp, SWT.NONE | SWT.READ_ONLY); String[] oderers = new String[] {NLMessages.getString("View_group_all"), NLMessages.getString("View_group_aspect_semantic"), NLMessages.getString("View_group_aspect_year"), NLMessages.getString("View_group_aspect_place"), NLMessages.getString("View_group_aspect_reference"), NLMessages.getString("View_group_aspect_relation"), NLMessages.getString("View_group_aspect_markup"), NLMessages.getString("View_group_aspect_person"), NLMessages.getString("View_group_user"), NLMessages.getString("View_group_genre"), NLMessages.getString("View_group_author"), NLMessages.getString("View_group_title"), NLMessages.getString("View_group_publisher"), NLMessages.getString("View_group_place"), NLMessages.getString("View_group_location"), NLMessages.getString("View_group_date_copyright"), NLMessages.getString("View_grou_date_captured"), NLMessages.getString("View_group_date_creation")}; _orderCombo.setItems(oderers); _orderCombo.select(0); _orderCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent event) { } }); // SelectionListener _orderButton = new Button(ordertitleComp, SWT.NONE | SWT.READ_ONLY); _orderButton.setText(NLMessages.getString("View_group")); _orderButton.setToolTipText(NLMessages.getString("View_group_references_tooltip")); _orderButton.setImage(_imageReg.get(IconsInternal.GROUP)); _orderButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent event) { int selection = _orderCombo.getSelectionIndex(); switch (selection) { case 0: _pdrObjectsProvider.setOrderer(null); _pdrObjectsProvider.setRefOrderer(null); break; case 1: _pdrObjectsProvider.setOrderer(_ordererFactory.createAspectOrderer("aspect.semantic")); _pdrObjectsProvider.setRefOrderer(null); break; case 2: _pdrObjectsProvider.setOrderer(_ordererFactory.createAspectOrderer("aspect.year")); _pdrObjectsProvider.setRefOrderer(null); break; case 3: _pdrObjectsProvider.setOrderer(_ordererFactory.createAspectOrderer("aspect.place")); _pdrObjectsProvider.setRefOrderer(null); break; case 4: _pdrObjectsProvider.setOrderer(_ordererFactory.createAspectOrderer("aspect.reference")); _pdrObjectsProvider.setRefOrderer(null); break; case 5: _pdrObjectsProvider.setOrderer(_ordererFactory.createAspectOrderer("aspect.relation")); _pdrObjectsProvider.setRefOrderer(null); break; case 6: _pdrObjectsProvider.setOrderer(_ordererFactory.createAspectOrderer("aspect.markup")); _pdrObjectsProvider.setRefOrderer(null); break; case 7: _pdrObjectsProvider.setOrderer(_ordererFactory.createAspectOrderer("aspect.person")); _pdrObjectsProvider.setRefOrderer(null); break; case 8: _pdrObjectsProvider.setOrderer(null); _pdrObjectsProvider.setRefOrderer(_ordererFactory.createReferenceOrderer("reference.user")); break; case 9: _pdrObjectsProvider.setOrderer(null); _pdrObjectsProvider.setRefOrderer(_ordererFactory.createReferenceOrderer("reference.genre")); break; case 10: _pdrObjectsProvider.setOrderer(null); _pdrObjectsProvider.setRefOrderer(_ordererFactory .createReferenceOrderer("reference.author")); break; case 11: _pdrObjectsProvider.setOrderer(null); _pdrObjectsProvider.setRefOrderer(_ordererFactory.createReferenceOrderer("reference.title")); break; case 12: _pdrObjectsProvider.setOrderer(null); _pdrObjectsProvider.setRefOrderer(_ordererFactory .createReferenceOrderer("reference.origin.publisher")); break; case 13: _pdrObjectsProvider.setOrderer(null); _pdrObjectsProvider.setRefOrderer(_ordererFactory .createReferenceOrderer("reference.origin.place")); break; case 14: _pdrObjectsProvider.setOrderer(null); _pdrObjectsProvider.setRefOrderer(_ordererFactory .createReferenceOrderer("reference.location")); break; case 15: _pdrObjectsProvider.setOrderer(null); _pdrObjectsProvider.setRefOrderer(_ordererFactory .createReferenceOrderer("reference.date.copyright")); break; case 16: _pdrObjectsProvider.setOrderer(null); _pdrObjectsProvider.setRefOrderer(_ordererFactory .createReferenceOrderer("reference.date.capture")); break; case 17: _pdrObjectsProvider.setOrderer(null); _pdrObjectsProvider.setRefOrderer(_ordererFactory .createReferenceOrderer("reference.date.creation")); break; default: break; } disposeTabItems(); _currentRefCategoryId = 0; if (_concurring) { buildCategories(new Person[] {_facade.getConcurringPerson()}, _facade.getCurrentReference()); } else { buildCategories(_facade.getCurrentTreeObjects(), _facade.getCurrentReference()); } } }); // SelectionListener _orderButton.setEnabled(false); Composite sorttitleComp = new Composite(topComposite, SWT.NONE); sorttitleComp.setLayout(new GridLayout()); ((GridLayout) sorttitleComp.getLayout()).numColumns = 4; ((GridLayout) sorttitleComp.getLayout()).marginHeight = 0; ((GridLayout) sorttitleComp.getLayout()).marginWidth = 0; Label sort = new Label(sorttitleComp, SWT.NONE); sort.setText(NLMessages.getString("View_sort_by")); sort.setLayoutData(new GridData()); ((GridData) sort.getLayoutData()).horizontalIndent = 8; _sortedCombo = new Combo(sorttitleComp, SWT.NONE | SWT.READ_ONLY); String[] sorters = new String[] {NLMessages.getString("View_sort_cronologically"), NLMessages.getString("View_sort_title"), NLMessages.getString("View_sort_revision"), NLMessages.getString("View_sort_author"), NLMessages.getString("View_sort_creator")}; _sortedCombo.setItems(sorters); _sortedCombo.select(0); _sortedCombo.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent event) { _sortButtonDesc.setEnabled(true); _sortButtonAsc.setEnabled(true); } }); // SelectionListener _sortButtonDesc = new Button(sorttitleComp, SWT.NONE | SWT.READ_ONLY); _sortButtonDesc.setToolTipText(NLMessages.getString("View_sort_references_desc_desc")); _sortButtonDesc.setImage(_imageReg.get(IconsInternal.SORT_ALPHABETIC_ASC)); _sortButtonDesc.setEnabled(false); _sortButtonDesc.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent event) { _sortButtonDesc.setEnabled(false); _sortButtonAsc.setEnabled(true); int selection = _sortedCombo.getSelectionIndex(); switch (selection) { case 0: _pdrObjectsProvider.setRefComparator(new ReferenceCronComparator(false)); break; case 1: _pdrObjectsProvider.setRefComparator(new ReferenceByTitleComparator(false)); break; case 2: _pdrObjectsProvider.setRefComparator(new ReferenceByRecentChangesComparator(false)); break; case 3: _pdrObjectsProvider.setRefComparator(new ReferenceByAuthorTitleComparator(false)); break; case 4: _pdrObjectsProvider.setRefComparator(new ReferenceByCreatorComparator(false)); break; default: break; } disposeTabItems(); if (_concurring) { buildCategories(new Person[] {_facade.getConcurringPerson()}, _facade.getCurrentReference()); } else { buildCategories(_facade.getCurrentTreeObjects(), _facade.getCurrentReference()); } _tabFolderRef.setSelection(_currentRefCategoryId); } }); // SelectionListener _sortButtonDesc.setEnabled(false); _sortButtonAsc = new Button(sorttitleComp, SWT.NONE | SWT.READ_ONLY); _sortButtonAsc.setToolTipText(NLMessages.getString("View_sort_references_asc_tooltip")); _sortButtonAsc.setImage(_imageReg.get(IconsInternal.SORT_ALPHABETIC_DESC)); _sortButtonAsc.setEnabled(true); _sortButtonAsc.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent event) { _sortButtonDesc.setEnabled(true); _sortButtonAsc.setEnabled(false); int selection = _sortedCombo.getSelectionIndex(); // System.out.println("ordering selection " + selection); //$NON-NLS-1$ switch (selection) { case 0: _pdrObjectsProvider.setRefComparator(new ReferenceCronComparator(true)); break; case 1: _pdrObjectsProvider.setRefComparator(new ReferenceByTitleComparator(true)); break; case 2: _pdrObjectsProvider.setRefComparator(new ReferenceByRecentChangesComparator(true)); break; case 3: _pdrObjectsProvider.setRefComparator(new ReferenceByAuthorTitleComparator(true)); break; case 4: _pdrObjectsProvider.setRefComparator(new ReferenceByCreatorComparator(true)); break; default: break; } disposeTabItems(); if (_concurring) { // loadPdrObject(_facade.getConcurringPerson()); buildCategories(new Person[] {_facade.getConcurringPerson()}, _facade.getCurrentReference()); } else { buildCategories(_facade.getCurrentTreeObjects(), _facade.getCurrentReference()); } _tabFolderRef.setSelection(_currentRefCategoryId); } }); // SelectionListener topComposite.layout(); topComposite.pack(); } _mainComposite.layout(); _mainComposite.pack(); createFilters(); createContextMenuAction(); createActions(); createMenus(); if (secId != null) { // System.out.println("secId " + secId); //$NON-NLS-1$ if (secId.startsWith("pdrPo")) //$NON-NLS-1$ { _additional = true; Person p = _facade.getPerson(new PdrId(secId)); if (p != null) { loadPdrObject(new Person[] {p}); setPartName(p.getDisplayName(27)); setTitleToolTip(p.getDisplayName()); } } else if (secId.startsWith("pdrRo")) //$NON-NLS-1$ { _additional = true; ReferenceMods r = _facade.getReference(new PdrId(secId)); if (r != null) { loadPdrObject(new ReferenceMods[] {r}); setPartName(r.getDisplayName(27)); setTitleToolTip(r.getDisplayName()); } } else if (secId.startsWith("pdrAo")) //$NON-NLS-1$ { _additional = true; Aspect a = _facade.getLoadedAspects().get(secId); if (a != null) { loadPdrObject(new Aspect[] {a}); setPartName(a.getDisplayName(27)); setTitleToolTip(a.getDisplayName()); } } else if (secId.startsWith("a")) //$NON-NLS-1$ { loadPdrObject(_facade.getCurrentTreeObjects()); } else if (secId.startsWith("b")) //$NON-NLS-1$ { loadPdrObject(new Person[] {_facade.getConcurringPerson()}); } } else { loadPdrObject(_facade.getCurrentTreeObjects()); } _facade.addObserver(this); } @Override public final void dispose() { _facade.deleteObserver(ReferenceCatView.this); } /** * Dispose tab items. */ private void disposeTabItems() { if (_tabMap != null) { _tabMap.clear(); _tabMap = null; } if (_tabFolderRef != null) { _tabFolderRef.dispose(); } } /** * Fill menu. * @param rootMenuManager the root menu manager */ private void fillMenu(final IMenuManager rootMenuManager) { rootMenuManager.add(_onlyNewReferencesAction); rootMenuManager.add(_onlyUpdatedReferencesAction); rootMenuManager.add(_semanticFilterAction); rootMenuManager.add(_userFilterAction); } @Override public ISelection getSelection() { StructuredSelection selection; if (_selectedReference != null) { selection = new StructuredSelection(new PdrObject[] {_selectedReference}); } else { selection = new StructuredSelection(new PdrObject[] {}); } return selection; } /** * Load pdr object. * @param pdrObjects the pdr objects */ private void loadPdrObject(final PdrObject[] pdrObjects) { _currentObjects = pdrObjects; if (_tabFolderRef != null) { _tabFolderRef.dispose(); } _pdrObjectsProvider.setInput(pdrObjects); _pdrObjectsProvider.setLazySorting(true); _pdrObjectsProvider.setOrderer(null); _pdrObjectsProvider.removeAllFilters(); if (_advanced) { _orderCombo.select(0); } _currentRefCategoryId = 0; _onlyNewReferencesAction.setChecked(false); _onlyUpdatedReferencesAction.setChecked(false); _userFilterAction.setChecked(false); _semanticFilterAction.setChecked(false); _onlyNewReferencesAction.setEnabled(true); _onlyUpdatedReferencesAction.setEnabled(true); _userFilterAction.setEnabled(true); _semanticFilterAction.setEnabled(true); if (_currentObjects != null) { if (_facade.getCurrentReference() != null && _currentObjects.length > 0 && _currentObjects[_currentObjects.length - 1] != null && _currentObjects[_currentObjects.length - 1].getAspectIds().contains( _facade.getCurrentReference().getPdrId().toString())) { buildCategories(_currentObjects, _facade.getCurrentReference()); } else { buildCategories(_currentObjects, null); } } } /** * meth load one reference, sets layout of text, sets stext and adds * mouselistener for message box and context menu. * @param cr current reference * @param cCat current category id * @param refPresentation reference presentation * @param position position */ private void loadReference(final ReferenceMods cr, final int cCat, final IReferencePresentation refPresentation, final int position) { refPresentation.setReference(cr); refPresentation.createPresentation(); refPresentation.addSelectionListener(new Listener() { @Override public void handleEvent(final Event event) { IReferencePresentation current = (IReferencePresentation) event.data; _selectedReference = current.getReference(); current.setSelected(true); _facade.setCurrentReference(_selectedReference); //$NON-NLS-1$ IReferencePresentation last = (IReferencePresentation) _tabFolderRef.getData("lastSelected"); //$NON-NLS-1$ IStatus sca = new Status(IStatus.INFO, Activator.PLUGIN_ID, "ReferenceCatView current reference: " + _facade.getCurrentReference().getPdrId().toString()); //$NON-NLS-1$ iLogger.log(sca); if (last != null && !last.equals(current)) { last.setSelected(false); } _tabFolderRef.setData("lastSelected", current); //$NON-NLS-1$ } }); refPresentation.addDoubleClickListener(new Listener() { @Override public void handleEvent(final Event event) { IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench().getService( IHandlerService.class); try { handlerService.executeCommand("org.bbaw.pdr.ae.view.main.commands.OpenSourceEditorDialog", null); //$NON-NLS-1$ } catch (ExecutionException e) { e.printStackTrace(); } catch (NotDefinedException e) { e.printStackTrace(); } catch (NotEnabledException e) { e.printStackTrace(); } catch (NotHandledException e) { e.printStackTrace(); } } }); } /** * meth. loads all aspects that belong to the same currently selected * category. * @param groupedReferences vector of oderingHeads containing the grouped * references * @param currentCategoryID current category ID * @param startIndex start index * @param number number references to be shown on one page * @param savedReference just saved reference or null */ private void loadReferences(final Vector<OrderingHead> groupedReferences, final int currentCategoryID, final int startIndex, final int number, final ReferenceMods savedReference) { final int start; // System.out.println("tabmap hast mapping für " + currentCategoryID // + " ??: " + tabMap.containsKey(currentCategoryID)); //$NON-NLS-1$ //$NON-NLS-2$ // System.out.println(tabMap.get(currentCategoryID)); CTabItem ti = _tabMap.get(currentCategoryID); ti.setData("loaded", "true"); //$NON-NLS-1$ //$NON-NLS-2$ ScrolledComposite sc = (ScrolledComposite) ti.getControl(); Composite comp = (Composite) sc.getContent(); Control[] children = comp.getChildren(); for (Control c : children) { c.dispose(); } if (!groupedReferences.get(currentCategoryID).isSorted()) { _pdrObjectsProvider.sort(groupedReferences.get(currentCategoryID)); } _references = groupedReferences.get(currentCategoryID).getReferences(); IStatus sla = new Status(IStatus.INFO, Activator.PLUGIN_ID, "RefCatView load references - number of references: " + _references.size()); //$NON-NLS-1$ iLogger.log(sla); if (_references != null) { final int size = _references.size(); // System.out.println("anzahl der ref " + size); //$NON-NLS-1$ Label referenceNumber = new Label(comp, SWT.NONE); int endIndex = startIndex + 10; if (endIndex > size) { endIndex = size; } referenceNumber.setText(NLMessages.getString("View_total_number") + " " + size + " " + NLMessages.getString("View_references") + (startIndex + 1) + " - " + endIndex); //$NON-NLS-1$ if (size > 10) { start = startIndex; Group eventNavBar = new Group(comp, SWT.NONE); eventNavBar.setText(NLMessages.getString("View_scroll")); eventNavBar.setLayout(new RowLayout()); Button toStart = new Button(eventNavBar, SWT.PUSH); toStart.setText(" |< "); //$NON-NLS-1$ toStart.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent arg0) { loadReferences(groupedReferences, currentCategoryID, 0, number, null); } }); final Button minusTen = new Button(eventNavBar, SWT.PUSH); minusTen.setText(" -10 "); //$NON-NLS-1$ if (start - 10 < 0) { minusTen.setEnabled(false); } else { minusTen.setEnabled(true); } minusTen.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent arg0) { int nextStart = start - 10; loadReferences(groupedReferences, currentCategoryID, nextStart, number, null); } }); final Button minusOne = new Button(eventNavBar, SWT.PUSH); minusOne.setText(" -1 "); //$NON-NLS-1$ if (start - 1 < 0) { minusOne.setEnabled(false); } else { minusOne.setEnabled(true); } minusOne.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent arg0) { int nextStart = start - 1; loadReferences(groupedReferences, currentCategoryID, nextStart, number, null); } }); final Text jumpTo = new Text(eventNavBar, SWT.BORDER); jumpTo.setSize(15, 20); Button okButton = new Button(eventNavBar, SWT.PUSH); okButton.setText(NLMessages.getString("View_ok")); okButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent arg0) { try { if (jumpTo.getText().length() > 0) { int n = Integer.parseInt(jumpTo.getText()); if (n > 0 && n <= size) { loadReferences(groupedReferences, currentCategoryID, --n, number, null); } } } catch (NumberFormatException ex) { String message = NLMessages.getString("View_pleaseEnterNumber"); //$NON-NLS-1$ MessageDialog.openInformation(_parentShell, NLMessages.getString("View_error"), message); //$NON-NLS-1$ } } }); final Button plusOne = new Button(eventNavBar, SWT.PUSH); plusOne.setText(" +1 "); //$NON-NLS-1$ if (start + 1 >= size) { plusOne.setEnabled(false); } else { plusOne.setEnabled(true); } plusOne.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent arg0) { int nextStart = start + 1; loadReferences(groupedReferences, currentCategoryID, nextStart, number, null); } }); final Button plusTen = new Button(eventNavBar, SWT.PUSH); plusTen.setText(" +10 "); //$NON-NLS-1$ if (start + 10 >= size) { plusTen.setEnabled(false); } else { plusTen.setEnabled(true); } plusTen.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent arg0) { int nextStart = start + 10; loadReferences(groupedReferences, currentCategoryID, nextStart, number, null); } }); } else { start = 0; } int i = start; // int end = i + number; while (i < start + number) { if (size > i) { // System.out.println("i " + i); //$NON-NLS-1$ // if (references == null) System.out.println("refs null"); //$NON-NLS-1$ ReferenceMods cr = _references.get(i); @SuppressWarnings("unused") RightsChecker rc = new RightsChecker(); if (true) { IReferencePresentation referencePresentation = ControlExtensions.createReferencePresentation(); referencePresentation.setComposite(comp); // StyledText stext = new StyledText(comp, SWT.WRAP | // SWT.NO_BACKGROUND | SWT.NO_FOCUS | SWT.CURSOR_ARROW | // SWT.BORDER); // if (cr == null) System.out.println("cr null"); //$NON-NLS-1$ // if (cr.getPdrId() == null) System.out.println("id null"); //$NON-NLS-1$ // System.out.println("hier bricht er ab " + cr.getPdrId().toString()); //$NON-NLS-1$ loadReference(cr, currentCategoryID, referencePresentation, i); createContextMenu(referencePresentation.getControl()); i++; } } else { break; } } } setStatusLine(NLMessages.getString("View_statusLine_ready")); sc.setContent(comp); sc.setMinSize(comp.computeSize(SWT.DEFAULT, SWT.DEFAULT)); comp.layout(); } // /////////////////////Update - Observer /////////////////////////////// @Override public void removeSelectionChangedListener(ISelectionChangedListener listener) { // TODO Auto-generated method stub } @Override public void selectionChanged(final IWorkbenchPart part, final ISelection selection) { // TODO Auto-generated method stub } /** * Sets Focus in view. */ @Override public void setFocus() { // TODO Auto-generated method stub } @Override public void setSelection(ISelection selection) { // TODO Auto-generated method stub } /** * Sets the status line. * @param message the new status line */ private void setStatusLine(final String message) { // Get the status line and set the text IActionBars bars = getViewSite().getActionBars(); bars.getStatusLineManager().setMessage(message); } @Override public final void update(final Observable o, final Object arg) { IStatus supdate = new Status(IStatus.INFO, Activator.PLUGIN_ID, "ReferenceCatView update: " + arg); //$NON-NLS-1$ iLogger.log(supdate); if (!_concurring && !_additional) { if (arg.equals("newTreeObjects")) //$NON-NLS-1$ { // PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().activate(this); loadPdrObject(_facade.getCurrentTreeObjects()); } else if (arg.equals("newReference") && _tabFolderRef != null) //$NON-NLS-1$ { if (_tabFolderRef != null) { IReferencePresentation last = (IReferencePresentation) _tabFolderRef.getData("lastSelected"); //$NON-NLS-1$ if (last != null && !_facade.getCurrentReference().equals(last.getReference())) { last.setSelected(false); } } } else if (arg.equals("newNewReference")) //$NON-NLS-1$ { // PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().activate(this); loadPdrObject(_facade.getCurrentTreeObjects()); } else if (arg.equals("refreshAll")) //$NON-NLS-1$ { // PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().activate(this); disposeTabItems(); } } else if (!_additional) { if (arg.equals("newConcurringPerson")) //$NON-NLS-1$ //$NON-NLS-2$ { // PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().activate(this); _currentRefCategoryId = 0; loadPdrObject(new Person[] {_facade.getConcurringPerson()}); } else if (arg.equals("newNewAspect")) //$NON-NLS-1$ //$NON-NLS-2$ { buildCategories(new Person[] {_facade.getConcurringPerson()}, null); } else if (arg.equals("noSelectedConcurringPerson")) //$NON-NLS-1$ { disposeTabItems(); } else if (arg.equals("newReference") && _tabFolderRef != null) //$NON-NLS-1$ { if (_tabFolderRef != null) { IReferencePresentation last = (IReferencePresentation) _tabFolderRef.getData("lastSelected"); //$NON-NLS-1$ if (last != null && !_facade.getCurrentReference().equals(last.getReference())) { last.setSelected(false); } } } } else if (_additional) { if (arg.equals("newReference") && _tabFolderRef != null) //$NON-NLS-1$ { if (_tabFolderRef != null) { IReferencePresentation last = (IReferencePresentation) _tabFolderRef.getData("lastSelected"); //$NON-NLS-1$ if (last != null && !_facade.getCurrentReference().equals(last.getReference())) { last.setSelected(false); } } } } } /** * Update filter. * @param action the action */ private void updateFilter(final Action action) { if (action == _onlyNewReferencesAction) { if (action.isChecked()) { _pdrObjectsProvider.addFilter(_onlyNewReferencesFilter); } else { _pdrObjectsProvider.removeFilter(_onlyNewReferencesFilter); } } else if (action == _onlyUpdatedReferencesAction) { if (action.isChecked()) { _pdrObjectsProvider.addFilter(_onlyUpdatedReferencesFilter); } else { _pdrObjectsProvider.removeFilter(_onlyUpdatedReferencesFilter); } } disposeTabItems(); buildCategories(_currentObjects, null); } }