/** * * Copyright * 2009-2015 Jayway Products AB * 2016-2017 Föreningen Sambruk * * Licensed under AGPL, Version 3.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/agpl.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package se.streamsource.streamflow.client.ui.workspace.cases; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.util.Observable; import java.util.Observer; import javax.swing.BorderFactory; import javax.swing.BoxLayout; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import org.jdesktop.application.ApplicationContext; import org.qi4j.api.injection.scope.Service; import org.qi4j.api.injection.scope.Uses; import se.streamsource.streamflow.api.workspace.cases.CaseDTO; import se.streamsource.streamflow.api.workspace.cases.general.PermissionsDTO; import se.streamsource.streamflow.client.ui.workspace.WorkspaceResources; import se.streamsource.streamflow.client.ui.workspace.table.CaseStatusLabel; import se.streamsource.streamflow.client.util.LinkedLabel; import se.streamsource.streamflow.client.util.i18n; /** * JAVADOC */ public class CaseInfoView extends JPanel implements Observer { CaseModel model; private JLabel title = new JLabel(""); private LinkedLabel caseType; private JLabel owner = new JLabel(""); private JLabel assignedTo = new JLabel(""); private JLabel createdBy = new JLabel(""); private JLabel lock = new JLabel( "" ); private CaseStatusLabel statusLabel = new CaseStatusLabel(); public CaseInfoView( @Service ApplicationContext appContext, @Uses CaseModel model) { setActionMap(appContext.getActionMap(this)); caseType = new LinkedLabel(); this.model = model; this.setFocusable( false ); setFont( getFont().deriveFont( getFont().getSize() - 2 ) ); setPreferredSize( new Dimension( 800, 50 ) ); setLayout( new BorderLayout() ); lock.setIcon( i18n.icon( CaseResources.case_unrestricted_icon ) ); add( lock, BorderLayout.WEST ); JPanel topPanel = new JPanel(); BoxLayout layout = new BoxLayout(topPanel, BoxLayout.X_AXIS); topPanel.setLayout( layout ); JLabel statusHeader = new JLabel( i18n.text( WorkspaceResources.case_status_header ) ); statusHeader.setFocusable( false ); statusHeader.setForeground( Color.GRAY ); statusLabel.setHorizontalAlignment( JLabel.LEFT ); JLabel titleHeader = new JLabel( i18n.text( WorkspaceResources.case_separator ) ); titleHeader.setFocusable( false ); titleHeader.setForeground( Color.GRAY ); JLabel typeHeader = new JLabel( i18n.text( WorkspaceResources.casetype_column_header ) ); typeHeader.setFocusable( false ); typeHeader.setForeground( Color.GRAY ); JLabel ownerHeader = new JLabel( i18n.text( WorkspaceResources.owner ) ); ownerHeader.setFocusable( false ); ownerHeader.setForeground( Color.GRAY ); JLabel createdHeader = new JLabel( i18n.text( WorkspaceResources.created_by ) ); createdHeader.setFocusable( false ); createdHeader.setForeground( Color.GRAY ); JLabel assignedHeader = new JLabel( i18n.text( WorkspaceResources.assigned_to_header ) ); assignedHeader.setFocusable( false ); assignedHeader.setForeground( Color.GRAY ); addBox(topPanel, statusHeader, statusLabel); addBox(topPanel, titleHeader, title); addBox(topPanel, typeHeader, caseType); addBox(topPanel, ownerHeader, owner); addBox(topPanel, createdHeader, createdBy); addBox(topPanel, assignedHeader, assignedTo); add( topPanel, BorderLayout.CENTER ); model.addObserver(this); } private void addBox( JPanel container, JLabel label, JComponent component ) { JPanel box = new JPanel(); box.setBorder( BorderFactory.createEmptyBorder( 0,0,0,10 ) ); box.setLayout(new BorderLayout()); box.add(label, BorderLayout.NORTH); box.add(component, BorderLayout.CENTER); container.add( box ); } public void update( Observable o, Object arg ) { CaseDTO aCase = model.getIndex(); if ( aCase.restricted().get() ) { lock.setIcon( i18n.icon( CaseResources.case_restricted_icon ) ); } else { lock.setIcon( i18n.icon( CaseResources.case_unrestricted_icon ) ); } lock.setToolTipText( buildToolTipText( model.permissions() ) ); statusLabel.setStatus( aCase.status().get(), aCase.resolution().get() ); String titleText = (aCase.caseId().get() != null ? "#" + aCase.caseId().get() + " " : "") + aCase.text().get(); title.setText( titleText ); title.setToolTipText( titleText ); String text = aCase.caseType().get() != null ? aCase.caseType().get().text().get() + (aCase.resolution().get() != null ? "(" + aCase.resolution().get() + ")" : "") : ""; caseType.setLink(aCase.caseType().get(), text); String ownerText = aCase.owner().get(); owner.setText( ownerText ); owner.setToolTipText( ownerText ); String createdByText = aCase.createdBy().get(); createdBy.setText( createdByText ); createdBy.setToolTipText( createdByText ); assignedTo.setText( aCase.assignedTo().get() != null ? aCase.assignedTo().get() : "" ); assignedTo.setToolTipText( assignedTo.getText() ); } private String buildToolTipText( PermissionsDTO permissions ) { StringBuilder sb = new StringBuilder(); String read = permissions.readAccess().get(); String write = permissions.writeAccess().get(); sb.append( "<html><b>" ) .append( i18n.text( WorkspaceResources.restrict ) ).append( "</b><br>" ); sb.append( read.substring( 0, 1 ).toUpperCase() ); sb.append( read.substring( 1 ) ).append( "<br>" ); sb.append( write.substring( 0,1 ).toUpperCase() ); sb.append( write.substring( 1 ) ).append( "</html>" ); return sb.toString(); } }