package com.constellio.app.modules.rm.extensions; import com.constellio.app.extensions.records.RecordNavigationExtension; import com.constellio.app.extensions.records.params.NavigationParams; import com.constellio.app.modules.rm.navigation.RMViews; import com.constellio.app.modules.rm.wrappers.ContainerRecord; import com.constellio.app.modules.rm.wrappers.Document; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.modules.rm.wrappers.RetentionRule; import com.constellio.app.ui.framework.components.display.ReferenceDisplay; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Component; import com.vaadin.ui.Table; public class RMRecordNavigationExtension implements RecordNavigationExtension { @Override public void navigateToEdit(NavigationParams navigationParams) { RMViews constellioNavigator = navigationParams.navigate().to(RMViews.class); String schemaTypeCode = navigationParams.getSchemaTypeCode(); String recordId = navigationParams.getRecordId(); if (Folder.SCHEMA_TYPE.equals(schemaTypeCode)) { constellioNavigator.editFolder(recordId); } else if (Document.SCHEMA_TYPE.equals(schemaTypeCode)) { constellioNavigator.editDocument(recordId); } else if (ContainerRecord.SCHEMA_TYPE.equals(schemaTypeCode)) { constellioNavigator.editContainer(recordId); } else if (RetentionRule.SCHEMA_TYPE.equals(schemaTypeCode)) { constellioNavigator.editRetentionRule(recordId); } else { throw new UnsupportedOperationException("No navigation for schema type code " + schemaTypeCode); } } @Override public void navigateToView(NavigationParams navigationParams) { RMViews constellioNavigator = navigationParams.navigate().to(RMViews.class); String schemaTypeCode = navigationParams.getSchemaTypeCode(); String recordId = navigationParams.getRecordId(); if (Folder.SCHEMA_TYPE.equals(schemaTypeCode)) { constellioNavigator.displayFolder(recordId); } else if (Document.SCHEMA_TYPE.equals(schemaTypeCode)) { constellioNavigator.displayDocument(recordId); } else if (ContainerRecord.SCHEMA_TYPE.equals(schemaTypeCode)) { constellioNavigator.displayContainer(recordId); } else if (RetentionRule.SCHEMA_TYPE.equals(schemaTypeCode)) { constellioNavigator.displayRetentionRule(recordId); } else { throw new UnsupportedOperationException("No navigation for schema type code " + schemaTypeCode); } } @Override public boolean isViewForSchemaTypeCode(String schemaTypeCode) { boolean viewForSchemaTypeCode; if (Folder.SCHEMA_TYPE.equals(schemaTypeCode)) { viewForSchemaTypeCode = true; } else if (Document.SCHEMA_TYPE.equals(schemaTypeCode)) { viewForSchemaTypeCode = true; } else if (ContainerRecord.SCHEMA_TYPE.equals(schemaTypeCode)) { viewForSchemaTypeCode = true; } else { viewForSchemaTypeCode = RetentionRule.SCHEMA_TYPE.equals(schemaTypeCode); } return viewForSchemaTypeCode; } @Override public void prepareLinkToView(final NavigationParams navigationParams) { if (isViewForSchemaTypeCode(navigationParams.getSchemaTypeCode())) { Component component = navigationParams.getComponent(); if (component instanceof ReferenceDisplay) { ReferenceDisplay referenceDisplay = (ReferenceDisplay) component; ClickListener clickListener = new ClickListener() { @Override public void buttonClick(ClickEvent event) { navigateToView(navigationParams); } }; referenceDisplay.setEnabled(true); referenceDisplay.addClickListener(clickListener); } else if (component instanceof Table) { // FIXME Assumes that it is called by an item click listener navigateToView(navigationParams); } } } }