/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE file at the root of the source * tree and available online at * * https://github.com/keeps/roda */ package org.roda.wui.client.planning; import java.util.HashMap; import java.util.Map; import org.roda.core.data.common.RodaConstants; import org.roda.core.data.v2.index.facet.Facets; import org.roda.core.data.v2.index.facet.SimpleFacetParameter; import org.roda.core.data.v2.index.filter.BasicSearchFilterParameter; import org.roda.core.data.v2.index.filter.Filter; import org.roda.core.data.v2.index.filter.SimpleFilterParameter; import org.roda.core.data.v2.index.select.SelectedItems; import org.roda.core.data.v2.risks.Risk; import org.roda.core.data.v2.risks.RiskIncidence; import org.roda.wui.client.browse.BrowserService; import org.roda.wui.client.common.LastSelectedItemsSingleton; import org.roda.wui.client.common.lists.RiskIncidenceList; import org.roda.wui.client.common.lists.utils.AsyncTableCell.CheckboxSelectionListener; import org.roda.wui.client.common.lists.utils.ClientSelectedItemsUtils; import org.roda.wui.client.common.search.SearchFilters; import org.roda.wui.client.common.search.SearchPanel; import org.roda.wui.client.common.utils.HtmlSnippetUtils; import org.roda.wui.client.common.utils.StringUtils; import org.roda.wui.common.client.ClientLogger; import org.roda.wui.common.client.tools.FacetUtils; import org.roda.wui.common.client.tools.HistoryUtils; import com.google.gwt.core.client.GWT; import com.google.gwt.event.logical.shared.HasValueChangeHandlers; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.SelectionChangeEvent; import config.i18n.client.ClientMessages; /** * @author Luis Faria * */ public class RiskShowPanel extends Composite implements HasValueChangeHandlers<Risk> { interface MyUiBinder extends UiBinder<Widget, RiskShowPanel> { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); private static ClientMessages messages = GWT.create(ClientMessages.class); @UiField Label title; @UiField Label riskId; @UiField Label riskName; @UiField Label riskDescriptionKey, riskDescriptionValue; @UiField Label riskIdentifiedOn; @UiField Label riskIdentifiedBy; @UiField Label riskCategory; @UiField Label riskNotesKey, riskNotesValue; @UiField Label riskPreMitigationKey; @UiField Label riskPreMitigationProbability; @UiField Label riskPreMitigationImpact; @UiField HTML riskPreMitigationSeverity; @UiField Label riskPreMitigationNotesKey, riskPreMitigationNotesValue; @UiField Label riskPosMitigationKey; @UiField Label riskPosMitigationProbabilityKey; @UiField Label riskPosMitigationProbability; @UiField Label riskPosMitigationImpactKey; @UiField Label riskPosMitigationImpact; @UiField Label riskPosMitigationSeverityKey; @UiField HTML riskPosMitigationSeverity; @UiField Label riskPosMitigationNotesKey, riskPosMitigationNotesValue; @UiField Label riskMitigationKey; @UiField Label riskMitigationStrategyKey, riskMitigationStrategyValue; @UiField Label riskMitigationOwnerTypeKey, riskMitigationOwnerTypeValue; @UiField Label riskMitigationOwnerKey, riskMitigationOwnerValue; @UiField Label riskMitigationRelatedEventIdentifierTypeKey, riskMitigationRelatedEventIdentifierTypeValue; @UiField Label riskMitigationRelatedEventIdentifierValueKey, riskMitigationRelatedEventIdentifierValueValue; @UiField(provided = true) SearchPanel searchPanel; @UiField(provided = true) RiskIncidenceList incidenceList; @SuppressWarnings("unused") private ClientLogger logger = new ClientLogger(getClass().getName()); private FlowPanel facetIncidenceStatus; private static final Filter DEFAULT_FILTER = SearchFilters.defaultFilter(RiskIncidence.class.getName()); private static final String ALL_FILTER = SearchFilters.allFilter(RiskIncidence.class.getName()); public RiskShowPanel() { Facets facets = new Facets(new SimpleFacetParameter(RodaConstants.RISK_INCIDENCE_STATUS)); incidenceList = new RiskIncidenceList(Filter.NULL, facets, messages.riskIncidences(), true); searchPanel = new SearchPanel(DEFAULT_FILTER, ALL_FILTER, true, messages.riskIncidenceRegisterSearchPlaceHolder(), false, false, false); searchPanel.setList(incidenceList); facetIncidenceStatus = new FlowPanel(); Map<String, FlowPanel> facetPanels = new HashMap<>(); facetPanels.put(RodaConstants.RISK_INCIDENCE_STATUS, facetIncidenceStatus); FacetUtils.bindFacets(incidenceList, facetPanels); initWidget(uiBinder.createAndBindUi(this)); } public RiskShowPanel(Risk risk, boolean hasTitle) { Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.RISK_INCIDENCE_RISK_ID, risk.getId())); Facets facets = new Facets(new SimpleFacetParameter(RodaConstants.RISK_INCIDENCE_STATUS)); incidenceList = new RiskIncidenceList(filter, facets, messages.riskIncidences(), hasTitle); Filter incidenceFilter = new Filter(new BasicSearchFilterParameter(RodaConstants.RISK_INCIDENCE_SEARCH, "*"), new SimpleFilterParameter(RodaConstants.RISK_INCIDENCE_RISK_ID, risk.getId())); searchPanel = new SearchPanel(incidenceFilter, ALL_FILTER, true, messages.riskIncidenceRegisterSearchPlaceHolder(), false, false, false); searchPanel.setList(incidenceList); facetIncidenceStatus = new FlowPanel(); Map<String, FlowPanel> facetPanels = new HashMap<>(); facetPanels.put(RodaConstants.RISK_INCIDENCE_STATUS, facetIncidenceStatus); FacetUtils.bindFacets(incidenceList, facetPanels); incidenceList.addCheckboxSelectionListener(new CheckboxSelectionListener<RiskIncidence>() { @Override public void onSelectionChange(SelectedItems<RiskIncidence> selected) { ShowRisk.getInstance().enableProcessButton(!(ClientSelectedItemsUtils.isEmpty(selected))); ShowRisk.getInstance().enableEditIncidenceButton(!(ClientSelectedItemsUtils.isEmpty(selected))); ShowRisk.getInstance().enableRemoveButton(!(ClientSelectedItemsUtils.isEmpty(selected))); } }); incidenceList.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { final RiskIncidence selected = incidenceList.getSelectionModel().getSelectedObject(); if (selected != null) { LastSelectedItemsSingleton.getInstance().setLastHistory(HistoryUtils.getCurrentHistoryPath()); HistoryUtils.newHistory(RiskIncidenceRegister.RESOLVER, ShowRiskIncidence.RESOLVER.getHistoryToken(), selected.getId()); } } }); initWidget(uiBinder.createAndBindUi(this)); title.setVisible(hasTitle); init(risk); } public void init(Risk risk) { riskId.setText(risk.getId()); riskName.setText(risk.getName()); riskDescriptionValue.setText(risk.getDescription()); riskDescriptionKey.setVisible(StringUtils.isNotBlank(risk.getDescription())); riskIdentifiedOn.setText(DateTimeFormat.getFormat(PredefinedFormat.DATE_TIME_FULL).format(risk.getIdentifiedOn())); riskIdentifiedBy.setText(risk.getIdentifiedBy()); riskCategory.setText(risk.getCategory()); riskNotesValue.setText(risk.getNotes()); riskNotesKey.setVisible(StringUtils.isNotBlank(risk.getNotes())); final int preProbability = risk.getPreMitigationProbability(); final int preImpact = risk.getPreMitigationImpact(); final int preSeverity = risk.getPreMitigationSeverity(); final int posProbability = risk.getPostMitigationProbability(); final int posImpact = risk.getPostMitigationImpact(); final int posSeverity = risk.getPostMitigationSeverity(); BrowserService.Util.getInstance().retrieveShowMitigationTerms(preProbability, preImpact, posProbability, posImpact, new AsyncCallback<RiskMitigationBundle>() { @Override public void onFailure(Throwable caught) { // do nothing } @Override public void onSuccess(RiskMitigationBundle terms) { int severityLowLimit = terms.getSeverityLowLimit(); int severityHighLimit = terms.getSeverityHighLimit(); riskPreMitigationProbability .setText(messages.riskMitigationProbability(terms.getPreMitigationProbability().replace(' ', '_'))); riskPreMitigationImpact .setText(messages.riskMitigationImpact(terms.getPreMitigationImpact().replace(' ', '_'))); riskPreMitigationSeverity .setHTML(HtmlSnippetUtils.getSeverityDefinition(preSeverity, severityLowLimit, severityHighLimit)); riskPosMitigationProbability .setText(messages.riskMitigationProbability(terms.getPosMitigationProbability().replace(' ', '_'))); riskPosMitigationImpact .setText(messages.riskMitigationImpact(terms.getPosMitigationImpact().replace(' ', '_'))); riskPosMitigationKey.setVisible(true); riskPosMitigationProbabilityKey.setVisible(true); riskPosMitigationProbability.setVisible(true); riskPosMitigationImpactKey.setVisible(true); riskPosMitigationImpact.setVisible(true); riskPosMitigationSeverityKey.setVisible(true); riskPosMitigationSeverity.setVisible(true); riskPosMitigationSeverity .setHTML(HtmlSnippetUtils.getSeverityDefinition(posSeverity, severityLowLimit, severityHighLimit)); } }); riskPreMitigationNotesValue.setText(risk.getPreMitigationNotes()); riskPreMitigationNotesKey.setVisible(StringUtils.isNotBlank(risk.getPreMitigationNotes())); riskPosMitigationNotesValue.setText(risk.getPostMitigationNotes()); riskPosMitigationNotesKey.setVisible(StringUtils.isNotBlank(risk.getPostMitigationNotes())); int mitigationCounter = 0; if (StringUtils.isNotBlank(risk.getMitigationStrategy())) { mitigationCounter++; riskMitigationStrategyKey.setVisible(true); riskMitigationStrategyValue.setText(risk.getMitigationStrategy()); } else { riskMitigationStrategyKey.setVisible(false); } if (StringUtils.isNotBlank(risk.getMitigationOwnerType())) { mitigationCounter++; riskMitigationOwnerTypeKey.setVisible(true); riskMitigationOwnerTypeValue.setText(risk.getMitigationOwnerType()); } else { riskMitigationOwnerTypeKey.setVisible(false); } if (StringUtils.isNotBlank(risk.getMitigationOwner())) { mitigationCounter++; riskMitigationOwnerKey.setVisible(true); riskMitigationOwnerValue.setText(risk.getMitigationOwner()); } else { riskMitigationOwnerKey.setVisible(false); } if (StringUtils.isNotBlank(risk.getMitigationRelatedEventIdentifierType())) { mitigationCounter++; riskMitigationRelatedEventIdentifierTypeKey.setVisible(true); riskMitigationRelatedEventIdentifierTypeValue.setText(risk.getMitigationRelatedEventIdentifierType()); } else { riskMitigationRelatedEventIdentifierTypeKey.setVisible(false); } if (StringUtils.isNotBlank(risk.getMitigationRelatedEventIdentifierValue())) { mitigationCounter++; riskMitigationRelatedEventIdentifierValueKey.setVisible(true); riskMitigationRelatedEventIdentifierValueValue.setText(risk.getMitigationRelatedEventIdentifierValue()); } else { riskMitigationRelatedEventIdentifierValueKey.setVisible(false); } if (mitigationCounter == 0) { riskMitigationKey.setVisible(false); } else { riskMitigationKey.setVisible(true); } // FIXME it must be visible later riskMitigationOwnerTypeKey.setVisible(false); riskMitigationOwnerTypeValue.setVisible(false); riskMitigationRelatedEventIdentifierTypeKey.setVisible(false); riskMitigationRelatedEventIdentifierTypeValue.setVisible(false); riskMitigationRelatedEventIdentifierValueKey.setVisible(false); riskMitigationRelatedEventIdentifierValueValue.setVisible(false); } public void clear() { riskId.setText(""); riskName.setText(""); riskDescriptionKey.setVisible(false); riskDescriptionValue.setText(""); riskIdentifiedOn.setText(""); riskIdentifiedBy.setText(""); riskCategory.setText(""); riskNotesKey.setVisible(false); riskNotesValue.setText(""); riskPreMitigationProbability.setText(""); riskPreMitigationImpact.setText(""); riskPreMitigationSeverity.setText(""); riskPreMitigationNotesKey.setVisible(false); riskPreMitigationNotesValue.setText(""); riskPosMitigationKey.setVisible(false); riskPosMitigationProbabilityKey.setVisible(false); riskPosMitigationProbability.setText(""); riskPosMitigationImpactKey.setVisible(false); riskPosMitigationImpact.setText(""); riskPosMitigationSeverityKey.setVisible(false); riskPosMitigationSeverity.setText(""); riskPosMitigationNotesKey.setVisible(false); riskPosMitigationNotesValue.setText(""); riskMitigationKey.setVisible(false); riskMitigationStrategyKey.setVisible(false); riskMitigationStrategyValue.setText(""); riskMitigationOwnerTypeKey.setVisible(false); riskMitigationOwnerTypeValue.setText(""); riskMitigationOwnerKey.setVisible(false); riskMitigationOwnerValue.setText(""); riskMitigationRelatedEventIdentifierTypeKey.setVisible(false); riskMitigationRelatedEventIdentifierTypeValue.setText(""); riskMitigationRelatedEventIdentifierValueKey.setVisible(false); riskMitigationRelatedEventIdentifierValueValue.setText(""); } @Override public HandlerRegistration addValueChangeHandler(ValueChangeHandler<Risk> handler) { return addHandler(handler, ValueChangeEvent.getType()); } public SelectedItems<RiskIncidence> getSelectedIncidences() { return incidenceList.getSelected(); } public void refreshList() { incidenceList.refresh(); } public FlowPanel getFacetIncidenceStatus() { return this.facetIncidenceStatus; } }