Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public final class DeliveryTopComponent
- extends TopComponent
- implements TableModelListener,
- BeanAware<Delivery>,
- MomentumModelEventListener,
- BasicServicesAware<Delivery, DeliveryInfo>,
- SaveObservable,
- SaveAllowable {
- private static final String PREFERRED_ID = "DeliveryTopComponent";
- private final PresentationModel<Delivery> pm = new PresentationModel<Delivery>(new ValueHolder(null, true));
- private DeliveryEditorService deliveryEditorService;
- private DeliveryCreationService deliveryCreationService;
- private TruckEditorService truckEditorService;
- private DriverEditorService driverEditorService;
- private TruckInquiryService truckInquiryService;
- private DriverInquiryService driverInquiryService;
- private BuyerInquiryService buyerInquiryService;
- private InventorySelectorDelegate selectorDelegate;
- private InventoryInquiryService inventoryInquiryService;
- private SaleOrderKeyDAO saleOrderKeyDAO;
- private final EventList<Buyer> buyers = new BasicEventList<Buyer>();
- private final EventList<Truck> trucks = new BasicEventList<Truck>();
- private final EventList<Driver> drivers = new BasicEventList<Driver>();
- private final EventList<SaleOrderKey> orderKeys = new BasicEventList<SaleOrderKey>();
- private final EventList<Currency> currencies = new BasicEventList<Currency>();
- private final EventList<Location> locations = new BasicEventList<Location>();
- private final EventList<Inventory> allInventories = new BasicEventList<Inventory>();
- private final FilterList<Inventory> inventories = new FilterList<Inventory>(allInventories);
- private final DeliveryForm form = new DeliveryForm();
- private final Executor executor = new SwingWorkerExecutor();
- private InventoryFinder inventoryFinder;
- private static final Logger log = Logger.getLogger(DeliveryForm.class.getPackage().getName());
- private final ProsperPreferences prosperPreferences;
- private SessionFacade sessionFacade;
- private InventoryComboDelegate inventoryComboDelegate;
- private FlowTableModel<DeliveryFlow> flowTableModel;
- private ListTableModel listFlowTableModel;
- private boolean locationEnabled = true;
- private CurrencyProvider currencyProvider = new DefaultCurrencyProvider();
- private final InventoryUnitSupport inventoryUnitSupport = new InventoryUnitSupport();
- private final TableConfigSupport tableConfigSupport = new TableConfigSupport("Delivery", form.getFlowTable());
- private final PresentationModel<Inventory> inventoryInfoPm = new PresentationModel<Inventory>(
- new ValueHolder(
- null, true));
- private final BasicSaveAction<Delivery, DeliveryInfo> saveAction = new BasicSaveAction<Delivery, DeliveryInfo>(
- this,
- this,
- this);
- private final SaveCookieSupport<Delivery, DeliveryInfo> saveCookieSupport;
- public DeliveryTopComponent (){this(SpringSingleton.getBean(ProsperPreferences.class));}
- public DeliveryTopComponent(ProsperPreferences prosperPreferences) {
- this.prosperPreferences = prosperPreferences;
- initComponents();
- setName(NbBundle.getMessage(DeliveryTopComponent.class, "CTL_DeliveryTopComponent"));
- setToolTipText(NbBundle.getMessage(DeliveryTopComponent.class, "HINT_DeliveryTopComponent"));
- initBindings();
- initEventHandling();
- saveCookieSupport = SaveCookieSupport.bind(pm, saveAction);
- AbstractNode node = new AbstractNode(Children.LEAF) {
- {
- getCookieSet().add(new FlowSelectionCookie(flowTableModel, form.getFlowTable()));
- }
- };
- associateLookup(
- new ProxyLookup(
- node.getLookup(),
- new SaveXlsNode(form.getFlowTable()).getLookup(), saveCookieSupport
- .getLookup()));
- TableModelWrapperUtils.getActualTableModel(form.getFlowTable().getModel()).addTableModelListener(
- new TableModelListener() {
- @Override
- public void tableChanged(TableModelEvent e) {
- saveCookieSupport.setChanged();
- }
- });
- }
- private void initComponents() {
- setLayout(new BorderLayout());
- add(form, BorderLayout.CENTER);
- AutoSelect autoSelect = new AutoSelect();
- autoSelect.install(form.getTransactionDateField().getFormattedTextField());
- AutoCompleteSupportExt.install(form.getTruckComboBox(), trucks).setFilterMode(TextMatcherEditor.CONTAINS);
- AutoCompleteSupportExt.install(form.getBuyerComboBox(), buyers).setFilterMode(TextMatcherEditor.CONTAINS);
- AutoCompleteSupportExt.install(form.getDriverComboBox(), drivers).setFilterMode(TextMatcherEditor.CONTAINS);
- AutoCompleteSupportExt.install(form.getSaleOrderKeyComboBox(), orderKeys).setFilterMode(TextMatcherEditor.CONTAINS);
- boolean useScan = prosperPreferences.isUseScan();
- form.getScanField().setVisible(useScan);
- form.getScanField().setVisible(useScan);
- flowTableModel = new DeliveryFlowTableModel();
- listFlowTableModel = new ListTableModel(flowTableModel);
- listFlowTableModel.addTableModelListener(this);
- form.getFlowTable().setModel(listFlowTableModel);
- TableColumnModel columnModel = form.getFlowTable().getColumnModel();
- int nameIndex = flowTableModel.getColumns().indexOf(FlowColumn.INVENTORY_NAME);
- if (nameIndex >= 0 && nameIndex < columnModel.getColumnCount()) {
- TableColumn nameColumn = columnModel.getColumn(nameIndex);
- nameColumn.setPreferredWidth(300);
- }
- int typeIndex = flowTableModel.getColumns().indexOf(FlowColumn.INVENTORY_TYPE);
- if (typeIndex >= 0 && typeIndex < columnModel.getColumnCount()) {
- TableColumn typeColumn = columnModel.getColumn(typeIndex);
- typeColumn.setCellRenderer(new ColorHashCellRenderer());
- }
- DeleteFlowAction deleteFlowAction = new DeleteFlowAction(
- flowTableModel, form.getFlowTable());
- form.getFlowTable().getInputMap()
- .put(
- KeyStroke.getKeyStroke(
- KeyEvent.VK_DELETE, InputEvent.CTRL_MASK),
- "flow_delete");
- form.getFlowTable().getActionMap()
- .put("flow_delete", deleteFlowAction);
- form.getFlowTable().setDefaultRenderer(String.class, new MultilineStringCellRenderer());
- JPopupMenu flowMenu = new JPopupMenu();
- flowMenu.add(new JMenuItem(deleteFlowAction));
- form.getFlowTable().addMouseListener(new ComponentPopupListener(flowMenu));
- form.getFlowTable().putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
- FlowTableColumnChooserUtil.setupTable(form.getFlowTable());
- InventoryInfoListener inventoryInfoListener = new InventoryInfoListener();
- form.getFlowTable().getSelectionModel()
- .addListSelectionListener(inventoryInfoListener);
- form.getFlowTable().getModel()
- .addTableModelListener(inventoryInfoListener);
- float fontSizeRatio = prosperPreferences.getFontSizeRatio();
- form.getFlowTable().setRowHeight(
- Math.round(
- form.getFlowTable().getRowHeight() * fontSizeRatio));
- form.getFlowTable().setDefaultEditor(
- Location.class,
- AutoCompleteSupportExt.createContainsTableCellEditor(locations));
- inventoryComboDelegate = InventoryComboDelegate.install(form.getFlowTable(), flowTableModel, true, null);
- form.getFlowTable().setDefaultEditor(
- InventoryUnit.class,
- AutoCompleteSupportExt.createContainsTableCellEditor(inventoryUnitSupport.getUnits()));
- currencies.addAll(currencyProvider.getInstalledCurrencies());
- form.getFlowTable().setDefaultEditor(
- Currency.class, AutoCompleteSupportExt.createContainsTableCellEditor(currencies));
- setInventoryFinder(new InventoryFinderCollectionImpl(Collections.<Inventory>emptyList(), false));
- }
- private void initBindings() {
- Bindings.bind(
- form.getTransactionDateField().getFormattedTextField(),
- new SqlDateConverter(pm.getModel(Usage.PROPERTYNAME_TRANSACTION_DATE)));
- AbstractValueModel buyerModel = pm.getModel(Delivery.PROPERTYNAME_BUYER);
- ComboBoxBinding.bind(form.getBuyerComboBox(), buyerModel, Buyer.class)
- .setChoices(buyers);
- ComboBoxBinding.bind(form.getDriverComboBox(), pm.getModel(Delivery.PROPERTYNAME_DRIVER), Driver.class)
- .setChoices(drivers);
- ComboBoxBinding.bind(form.getTruckComboBox(), pm.getModel(Delivery.PROPERTYNAME_TRUCK), Truck.class)
- .setChoices(trucks);
- ComboBoxBinding.bind(form.getSaleOrderKeyComboBox(), pm.getModel(Delivery.PROPERTYNAME_SALE_ORDER_KEY), SaleOrderKey.class)
- .setChoices(orderKeys);
- }
- private void initEventHandling() {
- form.getAddTruckButton().addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- new TruckPresenter(
- truckEditorService,
- pm.getModel(Weigh.PROPERTYNAME_TRUCK)).display();
- }
- });
- form.getAddDriverButton().addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- new DriverPresenter(
- driverEditorService,
- pm.getModel(Weigh.PROPERTYNAME_DRIVER)).display();
- }
- });
- form.getSaveButton().setAction(saveAction);
- form.getCancelButton().setAction(
- new BasicCancelAction<Delivery, DeliveryInfo>(
- this, this, this
- ));
- }
- // Variables declaration - do not modify//GEN-BEGIN:variables
- // End of variables declaration//GEN-END:variables
- /**
- * Gets default instance. Do not use directly: reserved for *.settings files only,
- * i.e. deserialization routines; otherwise you could get a non-deserialized instance.
- * To obtain the singleton instance, use {@link #findInstance}.
- */
- public static DeliveryTopComponent getDefault() {
- return new DeliveryTopComponent();
- }
- /**
- * Obtain the DeliveryTopComponent instance. Never call {@link #getDefault} directly!
- */
- public static DeliveryTopComponent findInstance() {
- TopComponent win = WindowManager.getDefault().findTopComponent(PREFERRED_ID);
- if (win == null) {
- Logger.getLogger(DeliveryTopComponent.class.getName()).warning(
- "Cannot find " + PREFERRED_ID + " component. It will not be located properly in the window system.");
- return getDefault();
- }
- if (win instanceof DeliveryTopComponent) {
- return (DeliveryTopComponent) win;
- }
- Logger.getLogger(DeliveryTopComponent.class.getName()).warning(
- "There seem to be multiple components with the '" + PREFERRED_ID
- + "' ID. That is a potential source of errors and unexpected behavior.");
- return getDefault();
- }
- public void setSessionFacade(SessionFacade sessionFacade) {
- this.sessionFacade = sessionFacade;
- flowTableModel.setSessionFacade(sessionFacade);
- inventoryUnitSupport.setSessionFacade(sessionFacade);
- selectorDelegate = new InventorySelectorDelegate(
- sessionFacade, new InventorySelectorDelegate.Callback() {
- @Nullable
- @Override
- public Location getCurrentLocation() {
- return null;
- }
- }, true, null);
- if (inventoryFinder != null) {
- selectorDelegate.setFinder(inventoryFinder);
- }
- selectorDelegate.setEnableSerialNumberList(false);
- selectorDelegate.setScanField(form.getScanField());
- selectorDelegate.prepare();
- selectorDelegate.addSelectorListener(new DeliverySelectorListener());
- }
- // harus menggunakan inventory finder yang Collection karena ada filter supplier
- private void setInventoryFinder(InventoryFinder inventoryFinder) {
- this.inventoryFinder = inventoryFinder;
- flowTableModel.setInventoryFinder(inventoryFinder);
- inventoryComboDelegate.setFinder(inventoryFinder);
- }
- /**
- * Get the inventories for this frame.
- *
- * @return the inventories
- */
- public List<Inventory> getInventories() {
- return inventories;
- }
- public void setAllowUpdateDate(boolean allowUpdateDate) {
- form.getTransactionDateField().setEnabled(allowUpdateDate);
- }
- public void setInventoryInquiryService(InventoryInquiryService inventoryInquiryService) {
- this.inventoryInquiryService = inventoryInquiryService;
- }
- public void setDeliveryEditorService(DeliveryEditorService deliveryEditorService) {
- this.deliveryEditorService = deliveryEditorService;
- }
- public void setDeliveryCreationService(DeliveryCreationService deliveryCreationService) {
- this.deliveryCreationService = deliveryCreationService;
- }
- public void setBuyerInquiryService(BuyerInquiryService buyerInquiryService) {
- this.buyerInquiryService = buyerInquiryService;
- }
- public void setTruckEditorService(TruckEditorService truckEditorService) {
- this.truckEditorService = truckEditorService;
- }
- public void setDriverEditorService(DriverEditorService driverEditorService) {
- this.driverEditorService = driverEditorService;
- }
- public void setTruckInquiryService(TruckInquiryService truckInquiryService) {
- this.truckInquiryService = truckInquiryService;
- }
- public void setDriverInquiryService(DriverInquiryService driverInquiryService) {
- this.driverInquiryService = driverInquiryService;
- }
- public void setCurrencyProvider(CurrencyProvider currencyProvider) {
- this.currencyProvider = currencyProvider;
- }
- public void setLocationEnabled(boolean locationEnabled) {
- this.locationEnabled = locationEnabled;
- }
- public void setSaleOrderKeyDAO(SaleOrderKeyDAO saleOrderKeyDAO) {
- this.saleOrderKeyDAO = saleOrderKeyDAO;
- }
- @Override
- public int getPersistenceType() {
- return TopComponent.PERSISTENCE_ALWAYS;
- }
- @Override
- protected Object writeReplace() {
- return new PersistentResolvableHelper<Delivery, DeliveryTopComponent>(
- getBean(), new NewInstanceAutowireFactory<DeliveryTopComponent>(DeliveryTopComponent.class));
- }
- @Override
- protected void componentShowing() {
- executor.execute(new DriverFindWorker(driverInquiryService, drivers));
- executor.execute(new TruckFindWorker(truckInquiryService, trucks));
- executor.execute(new BuyerFindWorker(buyerInquiryService, buyers));
- executor.execute(new SaleOrderKeyFindWorker(orderKeys, saleOrderKeyDAO));
- refreshInventories();
- super.componentShowing();
- }
- @Override
- public void componentOpened() {
- tableConfigSupport.load();
- super.componentOpened();
- }
- @Override
- public void componentClosed() {
- tableConfigSupport.save();
- super.componentClosed();
- }
- @Override
- public void momentumCommitted(MomentumModelEvent event) {}
- @Override
- public void momentumReverted(MomentumModelEvent event) {
- bindFromModel();
- }
- @Override
- public void momentumAdded(MomentumModelEvent event) {}
- @Override
- public void momentumRemoved(MomentumModelEvent event) {}
- @Override
- public void modelDestroyed() {}
- @Override
- protected String preferredID() {
- return PREFERRED_ID;
- }
- @Override
- public BasicEditorService<Delivery, DeliveryInfo> getBasicEditorService() {
- return deliveryEditorService;
- }
- @Override
- public BasicCreationService<Delivery> getBasicCreationService() {
- return deliveryCreationService;
- }
- @Override
- public void setBean(Delivery t) {
- pm.setBean(t);
- bindFromModel();
- FlowAwareFocus focus = prosperPreferences.getFlowAwareFocus();
- if (focus != null) {
- switch (focus) {
- case SCAN:
- form.getScanField().requestFocusInWindow();
- break;
- case NAME:
- case TABLE:
- form.getFlowTable().requestFocusInWindow();
- break;
- case DEFAULT:
- break;
- }
- }
- pm.resetChanged();
- }
- @Override
- public Delivery getBean() {
- return pm.getBean();
- }
- @Override
- public void setAllowSave(boolean allowSave) {
- saveAction.setEnabled(allowSave);
- }
- @Override
- public void addSaveListener(ActionListener listener) {
- saveAction.addSaveListener(listener);
- }
- @Override
- public void removeSaveListener(ActionListener listener) {
- saveAction.removeSaveListener(listener);
- }
- @Override
- public void tableChanged(TableModelEvent e) {}
- List<FlowColumn> getColumns() {return new ArrayList<FlowColumn>(flowTableModel.getColumns());}
- private void bindFromModel() {
- Delivery delivery = pm.getBean();
- if (delivery != null) {
- if (log.isLoggable(Level.FINE)) {
- log.fine(
- "The current supplier is ");
- }
- flowTableModel.setFlows(delivery.getFlows());
- listFlowTableModel.setList(delivery.getFlows());
- } else {
- flowTableModel.setFlows(null);
- listFlowTableModel.setList(null);
- disableEditor();
- }
- }
- private void disableEditor() {
- form.getCancelButton().setEnabled(false);
- }
- private void refreshInventories() {
- if (!prosperPreferences.isUseHugeInventory()) {
- executor.execute(
- new InventoryPurchaseFindWorker(allInventories, inventoryInquiryService) {
- @Override
- protected void setObjects(List<Inventory> t) {
- super.setObjects(t);
- setInventoryFinder(new InventoryFinderCollectionImpl(t, false));
- }
- });
- }
- }
- private void updateInventoryInfo(Inventory inventory) {
- inventoryInfoPm.setBean(inventory);
- }
- class DeliveryFlowTableModel
- extends FlowTableModel<DeliveryFlow>
- implements Creative {
- private static final long serialVersionUID = 1L;
- DeliveryFlowTableModel() {
- super(
- sessionFacade, prosperPreferences, currencyProvider,
- FlowColumnsFactory.build(prosperPreferences));
- setCanPurchase(true);
- }
- @Override
- public boolean isCellEditable(int rowIndex, int columnIndex) {
- if (getColumns().get(columnIndex) == FlowColumn.LOCATION) {
- return locationEnabled;
- }
- return super.isCellEditable(rowIndex, columnIndex);
- }
- @Override
- public Object create() {
- DeliveryFlow flow = new DeliveryFlow();
- flow.setDelivery(pm.getBean());
- flow.setNormalQuantity(1);
- return flow;
- }
- @Override
- public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
- super.setValueAt(aValue, rowIndex, columnIndex);
- Delivery delivery = pm.getBean();
- if (delivery != null) {
- List<DeliveryFlow> flows = delivery.getFlows();
- if ((rowIndex < flows.size()) && (rowIndex >= 0)) {
- FlowColumn column = getColumns().get(columnIndex);
- // not all cases are handled
- //noinspection EnumSwitchStatementWhichMissesCases
- switch (column) {
- case INVENTORY_NAME:
- case INVENTORY_CODE:
- case INVENTORY_TYPE:
- default:
- // ignore
- }
- }
- }
- }
- }
- private class InventoryInfoListener
- implements ListSelectionListener, TableModelListener {
- @Override
- public void tableChanged(TableModelEvent e) {
- handle();
- }
- @Override
- public void valueChanged(ListSelectionEvent e) {
- if (!e.getValueIsAdjusting()) {
- handle();
- }
- }
- private void handle() {
- Inventory inventory = null;
- Delivery delivery = pm.getBean();
- if (delivery != null) {
- int row = form.getFlowTable().getSelectedRow();
- List<DeliveryFlow> flows = delivery.getFlows();
- if ((row >= 0) && (row < flows.size())) {
- DeliveryFlow flow = flows.get(row);
- inventory = flow.getInventory();
- }
- }
- updateInventoryInfo(inventory);
- inventoryUnitSupport.updateInventoryUnits(inventory);
- }
- }
- private class DeliverySelectorListener
- extends AbstractInventorySelectorListener<Delivery, DeliveryFlow> {
- @Override
- protected void requestFocusAfterAdd() {
- }
- @Override
- protected void updatePrice(InventorySelectorDelegate.AddEvent event, DeliveryFlow flow) {
- flow.setUnitPrice(event.getPrice());
- }
- @Override
- protected List<DeliveryFlow> getChildren(Delivery t) {return t.getFlows();}
- @Override
- protected void fireTableRowsInserted(int firstRow) {flowTableModel.fireTableRowsInserted(firstRow, firstRow);}
- @Override
- protected void fireTableRowsUpdated(int i) {flowTableModel.fireTableRowsUpdated(i, i);}
- @Override
- protected Delivery getBean() {return pm.getBean();}
- @Override
- protected void updateInventoryInfo(Inventory inventory, @Nullable Location location) {
- DeliveryTopComponent.this.updateInventoryInfo(inventory);
- }
- @Override
- protected void updateSelectorPrice(double qty, Inventory inventory) {
- if (inventory != null && inventory.getId() != null) {
- Double unitPrice = sessionFacade.getLatestPurchasePrice(inventory);
- selectorDelegate.setUnitPrice(unitPrice);
- }
- }
- @Override
- protected void updateInventoryUnits(Inventory inventory) {inventoryUnitSupport.updateInventoryUnits(inventory);}
- @Override
- protected void updateFlowPrice(DeliveryFlow flow, double price) {
- flow.setUnitPrice(price);
- }
- @Override
- protected void updateTotal() {}
- @Override
- protected void updateLocation(Delivery sale, DeliveryFlow flow) {}
- @Override
- protected JTable getFlowTable() {
- return form.getFlowTable();
- }
- @Override
- protected JFormattedTextField getAddPriceField() {
- return null;
- }
- @Override
- protected DeliveryFlow createChildren(Delivery t) {
- return new DeliveryFlow(t);
- }
- protected void addFlow(Delivery t, DeliveryFlow flow) {t.getFlows().add(flow);}
- protected boolean decideEqual(InventorySelectorDelegate.AddEvent event, DeliveryFlow existingFlow) {
- return InventorySelectorPriceDecider.decideEqual(event, existingFlow);
- }
- }
- }
Add Comment
Please, Sign In to add comment