package ch.elexis.core.ui.laboratory.actions; import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.window.Window; import ch.elexis.core.data.events.ElexisEventDispatcher; import ch.elexis.core.types.LabItemTyp; import ch.elexis.core.ui.laboratory.controls.LaborOrderViewerItem; import ch.elexis.core.ui.laboratory.dialogs.EditLabResultDialog; import ch.elexis.core.ui.locks.AcquireLockBlockingUi; import ch.elexis.core.ui.locks.ILockHandler; import ch.elexis.data.LabOrder.State; import ch.elexis.data.LabResult; import ch.rgw.tools.TimeTool; public class LaborResultEditDetailAction extends Action { private List<LabResult> results; private List<LaborOrderViewerItem> orders; private StructuredViewer viewer; @SuppressWarnings("unchecked") public LaborResultEditDetailAction(List<?> list, StructuredViewer viewer){ super(Messages.LaborResultEditDetailAction_title); //$NON-NLS-1$ Object firstObject = list.get(0); if (firstObject instanceof LabResult) { this.results = (List<LabResult>) list; } else if (firstObject instanceof LaborOrderViewerItem) { this.orders = (List<LaborOrderViewerItem>) list; } else { throw new IllegalArgumentException("Unknown list type of class " //$NON-NLS-1$ + firstObject.getClass()); } this.viewer = viewer; } @Override public void run(){ if (results != null) { for (LabResult result : results) { final LabResult lockingResult = result; AcquireLockBlockingUi.aquireAndRun(lockingResult, new ILockHandler() { @Override public void lockFailed(){ // do nothing } @Override public void lockAcquired(){ EditLabResultDialog dialog = new EditLabResultDialog(viewer.getControl().getShell(), lockingResult); if (dialog.open() == Window.OK) { ElexisEventDispatcher.reload(LabResult.class); } } }); } } else if (orders != null) { for (LaborOrderViewerItem orderViewerItem : orders) { LabResult result = orderViewerItem.getLabResult(); if (result == null) { result = orderViewerItem.createResult(); result.setTransmissionTime(new TimeTool()); } final LabResult lockingResult = result; final LaborOrderViewerItem lockingOrder = orderViewerItem; AcquireLockBlockingUi.aquireAndRun(lockingResult, new ILockHandler() { @Override public void lockFailed(){ // do nothing } @Override public void lockAcquired(){ EditLabResultDialog dialog = new EditLabResultDialog(viewer.getControl().getShell(), lockingResult); if (dialog.open() == Window.OK) { lockingOrder.setState(State.DONE); ElexisEventDispatcher.reload(LabResult.class); } } }); } } } @Override public boolean isEnabled(){ if (results != null) { for (LabResult result : results) { if (result.getItem() != null) { if (result.getItem().getTyp() == LabItemTyp.DOCUMENT || result.getItem().getTyp() == LabItemTyp.FORMULA) { return false; } } } } else if (orders != null) { for (LaborOrderViewerItem order : orders) { if (order.hasLabItem()) { LabItemTyp itemTyp = order.getLabItemTyp(); if (itemTyp == LabItemTyp.DOCUMENT || itemTyp == LabItemTyp.FORMULA) { return false; } } } } return super.isEnabled(); } }