package org.simantics.district.network.ui.techtype.table; import java.util.List; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.inject.Inject; import org.eclipse.e4.ui.model.application.MApplication; import org.eclipse.e4.ui.model.application.commands.MCommand; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem; import org.eclipse.e4.ui.model.application.ui.menu.MMenuFactory; import org.eclipse.e4.ui.model.application.ui.menu.MToolBar; import org.eclipse.e4.ui.model.application.ui.menu.MToolBarElement; import org.eclipse.e4.ui.workbench.modeling.ESelectionService; import org.eclipse.swt.widgets.Composite; import org.simantics.Simantics; import org.simantics.db.Resource; import org.simantics.db.common.NamedResource; import org.simantics.db.common.procedure.adapter.TransientCacheListener; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.request.PossibleActiveModel; import org.simantics.district.network.DistrictNetworkUtil; import org.simantics.district.network.techtype.requests.PossibleTechTypeTable; import org.simantics.district.network.techtype.requests.PossibleTechTypeTableData; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TechTypeTableView { private final static Logger LOGGER = LoggerFactory.getLogger(TechTypeTableView.class); public static final String ID = "org.simantics.district.network.ui.techtype.table.techtypeTableView"; @Inject ESelectionService selectionService; public static TechTypeTable table; @Inject public void init(MPart part, MApplication app) { MToolBar toolBar = MMenuFactory.INSTANCE.createToolBar(); toolBar.setToBeRendered(true); toolBar.getChildren().add(createImportCSVDataToolItem(app)); toolBar.getChildren().add(createValidateTableToolItem(app)); toolBar.getChildren().add(createResetComponentsItem(app)); part.setToolbar(toolBar); } private MHandledToolItem createValidateTableToolItem(MApplication app) { MHandledToolItem createHandledToolItem = MMenuFactory.INSTANCE.createHandledToolItem(); // Command is contributed via fragment MCommand command = app.getCommand("org.simantics.district.network.ui.command.validatetechtypetable"); createHandledToolItem.setCommand(command); //$NON-NLS-1$ createHandledToolItem.setLabel("Validate Tech Type Table"); createHandledToolItem.setIconURI("platform:/plugin/com.famfamfam.silk/icons/accept.png"); //$NON-NLS-1$ return createHandledToolItem; } private MHandledToolItem createImportCSVDataToolItem(MApplication app) { MHandledToolItem createHandledToolItem = MMenuFactory.INSTANCE.createHandledToolItem(); // Command is contributed via fragment MCommand command = app.getCommand("org.simantics.district.network.ui.command.importtechtypecsv"); createHandledToolItem.setCommand(command); //$NON-NLS-1$ createHandledToolItem.setLabel("Import Tech Type"); createHandledToolItem.setIconURI("platform:/plugin/com.famfamfam.silk/icons/table_edit.png"); //$NON-NLS-1$ return createHandledToolItem; } private MToolBarElement createResetComponentsItem(MApplication app) { MHandledToolItem createHandledToolItem = MMenuFactory.INSTANCE.createHandledToolItem(); // Command is contributed via fragment MCommand command = app.getCommand("org.simantics.district.network.ui.command.resetcomponentproperties"); createHandledToolItem.setCommand(command); //$NON-NLS-1$ createHandledToolItem.setLabel("Reset Component Properties"); createHandledToolItem.setIconURI("platform:/plugin/com.famfamfam.silk/icons/database_go.png"); //$NON-NLS-1$ return createHandledToolItem; } @PostConstruct public void postConstruct(Composite parent) { Resource pipe = null; try { List componentTypes = DistrictNetworkUtil.getDistrictComponents(); pipe = componentTypes.stream() .filter(r -> r.getName().toLowerCase().contains("pipe")) .map(r -> r.getResource()) .findFirst().orElse(null); } catch (DatabaseException e) { LOGGER.error("Failed to read district component types for active model", e); } LOGGER.debug("Pipe component type is {}", pipe); String data = null; Resource tableResource = null; if (pipe != null) { try { Resource model = Simantics.getSession().syncRequest(new PossibleActiveModel(Simantics.getProjectResource())); if (model != null) { tableResource = Simantics.getSession().syncRequest(new PossibleTechTypeTable(model, pipe), TransientCacheListener.instance()); data = Simantics.getSession().syncRequest(new PossibleTechTypeTableData(model, pipe), TransientCacheListener.instance()); } } catch (DatabaseException e) { LOGGER.error("Failed to read tech type table data for {}", pipe, e); } } table = new TechTypeTable(parent, 0, pipe, tableResource, data); } @PreDestroy public void dispose() { table.dispose(); table = null; } }