@Transient public PonderationRule getNonNullSellPonderationRule() { if (sellPonderationRule == null) { EventSignalConfig eventConfig = (EventSignalConfig) ConfigThreadLocal.get(EventSignalConfig.EVENT_SIGNAL_NAME); Integer sellEvtThresh = eventConfig.getSellEventTriggerThreshold(); Integer buyEvtThresh = eventConfig.getBuyEventTriggerThreshold(); PonderationRule defaultSellPonderationRule = eventConfig.getSellPonderationRule(sellEvtThresh, buyEvtThresh); LOGGER.warn( "No sell weighting rule for " + this.name + " the config rule will be used " + defaultSellPonderationRule); return defaultSellPonderationRule; } return sellPonderationRule; }
@Override public void populatePopups(Composite popusGroup) { cleanPopupButtonsGroup(popusGroup); { evtDefsChartingBut = new Button(popusGroup, SWT.PUSH); evtDefsChartingBut.setFont(MainGui.DEFAULTFONT); evtDefsChartingBut.setText(INDICATORSBUTTXT); evtDefsChartingBut.setToolTipText( "This is to setup the display of calculators historical data at the bottom of the chart.\nYou must select a share in the portfolio to display its analysis."); evtDefsChartingBut.addSelectionListener( new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { handleEvent(); } @Override public void widgetDefaultSelected(SelectionEvent e) { handleEvent(); } private void handleEvent() { initEvtChartingPopup(true); } }); } { indicSettings = new Button(popusGroup, SWT.NONE); indicSettings.setFont(MainGui.DEFAULTFONT); indicSettings.setText("Calculator settings ..."); indicSettings.setToolTipText( "Only user defined calculators can be customised.\n" + "You must select one of your user defined calculators in '" + INDICATORSBUTTXT + "'\n" + "And wait for its calculation to finish before changing the display settings.\n" + "New calculators can be defined using the menu Events -> Customise and create calculators ..."); indicSettings.addSelectionListener( new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { handle(); } @Override public void widgetDefaultSelected(SelectionEvent e) { handle(); } private void handle() { initChartSettingsPopup(true); } }); } { evtDefsTrendChartingBut = new Button(popusGroup, SWT.PUSH); evtDefsTrendChartingBut.setFont(MainGui.DEFAULTFONT); evtDefsTrendChartingBut.setText(TRENDBUTTXT); evtDefsTrendChartingBut.setToolTipText( "This is to setup the display of gathered calculators trends.\nYou must select a share in the portfolio to display its analysis."); evtDefsTrendChartingBut.addSelectionListener( new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { handleEvent(); } @Override public void widgetDefaultSelected(SelectionEvent e) { handleEvent(); } private void handleEvent() { initEvtDefTrendPopup(true); } }); } { Button barSettings = new Button(popusGroup, SWT.NONE); barSettings.setFont(MainGui.DEFAULTFONT); barSettings.setText("Trends settings ..."); barSettings.addSelectionListener( new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { handle(); } @Override public void widgetDefaultSelected(SelectionEvent e) { handle(); } private void handle() { ActionDialogAction action = new ActionDialogAction() { @Override public void action(Control targetControl) { Stock viewStateParams = chartTarget.getHightlitedEventModel().getViewParamRoot(); if (viewStateParams != null) { highLight(chartTarget.getHighligtedId(), viewStateParams, true); } else { if (chartTarget.getChartedEvtDefsTrends() != null && !chartTarget.getChartedEvtDefsTrends().isEmpty()) { String errorMessage = "You must select a share in the portfolio to display its analysis."; showPopupDialog(errorMessage, "Ok", null, null); } } } }; if (barSettingsDialog == null || barSettingsDialog.getShell().isDisposed()) { barSettingsDialog = new BarSettingsDialog(chartTarget, barChartSettings, action); Rectangle parentBounds = chartTarget.getDisplay().map(chartTarget, null, chartTarget.getBounds()); barChartSettings = barSettingsDialog.open( new Point(parentBounds.x + parentBounds.width, parentBounds.y)); } else { barSettingsDialog.getShell().setVisible(true); barSettingsDialog.getShell().setActive(); barSettingsDialog.getShell().setFocus(); } } }); } { Button recalc = new Button(popusGroup, SWT.PUSH); recalc.setFont(MainGui.DEFAULTFONT); recalc.setText("Force&&Update Calculations"); recalc.addSelectionListener( new EventRefreshController( chartTarget.getHightlitedEventModel(), (RefreshableView) chartTarget.getParent().getParent(), ConfigThreadLocal.get(EventSignalConfig.EVENT_SIGNAL_NAME)) { @Override public void widgetSelected(SelectionEvent evt) { LOGGER.guiInfo("Cleaning and Recalculating. Thanks for waiting ..."); EventTaskQueue.getSingleton().invalidateTasksCreationDates(TaskId.Analysis); Set<EventInfo> allSelectedEventInfos = chartTarget.getChartedEvtDefsTrends(); if (!chartTarget.getChartedEvtDef().equals(EventDefinition.ZERO)) allSelectedEventInfos.add(chartTarget.getChartedEvtDef()); if (allSelectedEventInfos != null && !allSelectedEventInfos.isEmpty() && chartTarget.getHightlitedEventModel().getViewParamRoot() != null) { chartTarget.getHightlitedEventModel().setViewParam(0, allSelectedEventInfos); } this.updateEventRefreshModelState( 0l, TaskId.FetchQuotations, TaskId.Clean, TaskId.Analysis); super.widgetSelected(evt); } }); } popusGroup.layout(); }
private void eventsRecalculationAck( final Stock selectedShare, Date slidingStartDate, Date slidingEndDate, final HashSet<EventInfo> notUpToDateEI, Calendar minDate) { final RefreshableView parentView = (RefreshableView) chartTarget.getParent().getParent(); final EventRefreshController ctrller = new EventRefreshController( chartTarget.getHightlitedEventModel(), parentView, ConfigThreadLocal.get(EventSignalConfig.EVENT_SIGNAL_NAME)) { @Override public void widgetSelected(SelectionEvent evt) { LOGGER.guiInfo("Cleaning and Recalculating. Thanks for waiting ..."); EventTaskQueue.getSingleton().invalidateTasksCreationDates(TaskId.Analysis); this.updateEventRefreshModelState( 0l, TaskId.FetchQuotations, TaskId.Clean, TaskId.Analysis); super.widgetSelected(evt); } }; @SuppressWarnings("unchecked") boolean isValidTask = ctrller.isValidTask( TaskId.Analysis, selectedShare, new HashSet[] {notUpToDateEI}, slidingStartDate, slidingEndDate); if (isValidTask) { chartTarget.getHightlitedEventModel().setViewParamRoot(selectedShare); chartTarget.getHightlitedEventModel().setViewParam(0, notUpToDateEI); String msg = "Analysis are not up to date for " + selectedShare.getName() + ", the selected time frame and the requested trends."; String click = "Click to update calculations"; if (minDate.after(new Date(0))) msg = msg + "\nMinimun calculation date reached for this stock : " + new SimpleDateFormat("MMM dd yyyy").format(minDate); for (EventInfo eventInfo : notUpToDateEI) { if (chartTarget.getChartedEvtDefsTrends().contains(eventInfo) || chartTarget.getChartedEvtDef().equals(eventInfo)) { msg = msg + "\n'" + eventInfo.getEventReadableDef() + "' may be a candidate for update"; } } ActionDialogAction action = new ActionDialogAction() { @Override public void action(Control targetControl) { ctrller.widgetSelected(null); } }; showPopupDialog(msg, click, null, action); } else { // hidePopupDialog(); } }