From edbadf059edf5835825062063ae2cdcaf8b57d14 Mon Sep 17 00:00:00 2001 From: Michael Gamazaychikov Date: Wed, 29 Jan 2014 14:19:52 -0500 Subject: [PATCH] ASM #75 Change-Id: If2e1c8bc2d320b3681f64d8637fbabb9659d0c5b Former-commit-id: e726b2a3a2529f5909acb7fe0f9a3b8475f1642e --- .../texteditor/dialogs/TextEditorDialog.java | 187 +++++++++++++++--- .../edex/textdb/dbapi/impl/AFOSParser.java | 14 ++ 2 files changed, 173 insertions(+), 28 deletions(-) diff --git a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java index a3c8870531..ff502bd4f4 100644 --- a/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java +++ b/cave/com.raytheon.viz.texteditor/src/com/raytheon/viz/texteditor/dialogs/TextEditorDialog.java @@ -334,6 +334,7 @@ import com.raytheon.viz.ui.dialogs.SWTMessageBox; * 20Sep2013 #2394 lvenable Fixed color memory leaks. * 20Nov2013 DR 16777 D. Friedman Check if OUPRequest will work before setting ETN. * 10Dec2013 2601 mpduff Fix NullPointerException. + * 28Jan2014 DR14595 mgamazaychikov Added template loading and editing functionality. * * * @author lvenable @@ -1087,6 +1088,12 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, * Search and replace dialog. */ private SearchReplaceDlg searchReplaceDlg; + + /** + * Flag indicating if the overwrite mode has been set for + * template editing. + */ + private boolean isTemplateOverwriteModeSet = false; /** * Flag to indicate if the document being edited has been saved. @@ -2051,14 +2058,16 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, overStrikeItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { - if (overwriteMode == true) { - overwriteMode = false; - editorInsertCmb.select(INSERT_TEXT); - } else { - overwriteMode = true; - editorInsertCmb.select(OVERWRITE_TEXT); + if (!AFOSParser.isTemplate) { + if (overwriteMode == true) { + overwriteMode = false; + editorInsertCmb.select(INSERT_TEXT); + } else { + overwriteMode = true; + editorInsertCmb.select(OVERWRITE_TEXT); + } + textEditor.invokeAction(ST.TOGGLE_OVERWRITE); } - textEditor.invokeAction(ST.TOGGLE_OVERWRITE); } }); } @@ -3698,18 +3707,20 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, editorInsertCmb.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent event) { - if ((editorInsertCmb.getSelectionIndex() == INSERT_TEXT) - && (overwriteMode == true)) { - textEditor.invokeAction(ST.TOGGLE_OVERWRITE); - overwriteMode = false; - overStrikeItem.setSelection(false); - } else if ((editorInsertCmb.getSelectionIndex() == OVERWRITE_TEXT) - && (overwriteMode == false)) { - textEditor.invokeAction(ST.TOGGLE_OVERWRITE); - overwriteMode = true; - overStrikeItem.setSelection(true); + if (!AFOSParser.isTemplate) { + if (editorInsertCmb.getSelectionIndex() == INSERT_TEXT + && overwriteMode == true) { + textEditor.invokeAction(ST.TOGGLE_OVERWRITE); + overwriteMode = false; + overStrikeItem.setSelection(false); + } else if (editorInsertCmb.getSelectionIndex() == OVERWRITE_TEXT + && overwriteMode == false) { + textEditor.invokeAction(ST.TOGGLE_OVERWRITE); + overwriteMode = true; + overStrikeItem.setSelection(true); + } + textEditor.setFocus(); } - textEditor.setFocus(); } }); @@ -3869,16 +3880,18 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, event.doit = false; // Ignore Ctrl+Shift+PageDown } else if (event.keyCode == SWT.INSERT) { // Ins key on the keypad - if (overwriteMode == true) { - overwriteMode = false; - overStrikeItem.setSelection(false); - editorInsertCmb.select(INSERT_TEXT); - } else { - overwriteMode = true; - overStrikeItem.setSelection(true); - editorInsertCmb.select(OVERWRITE_TEXT); + if (AFOSParser.isTemplate) { + if (overwriteMode == true) { + overwriteMode = false; + overStrikeItem.setSelection(false); + editorInsertCmb.select(INSERT_TEXT); + } else { + overwriteMode = true; + overStrikeItem.setSelection(true); + editorInsertCmb.select(OVERWRITE_TEXT); + } + textEditor.invokeAction(ST.TOGGLE_OVERWRITE); } - textEditor.invokeAction(ST.TOGGLE_OVERWRITE); } else if (event.keyCode > 500) { // Do nothing... // We need to capture the non-alphanumeric editing-related @@ -3892,6 +3905,71 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, && (event.character != '\n')) { userKeyPressed = true; } + if (AFOSParser.isTemplate) { + + if (event.keyCode == SWT.BS) { + event.doit = false; + int currentPos = textEditor.getCaretOffset(); + String textUpToCaret = textEditor.getText().substring(0, currentPos); + int leftMost=textUpToCaret.lastIndexOf("[") + 1; + int rightMost = textEditor.getText().indexOf("]",currentPos); + int editableTextWidth = rightMost - leftMost; + String leftPart=""; + String rightPart=""; + if (currentPos == leftMost) { + leftPart = ""; + rightPart = textEditor.getText().substring( + currentPos, rightMost); + textEditor.setCaretOffset(leftMost); + } + else if (currentPos > leftMost && currentPos <= rightMost){ + leftPart = textEditor.getText().substring( + leftMost, currentPos - 1); + rightPart = textEditor.getText().substring( + currentPos, rightMost); + } + else if (currentPos == rightMost) { + leftPart = textEditor.getText().substring( + leftMost, currentPos-1); + rightPart = ""; + } + String newString = leftPart + rightPart; + int width = newString.length(); + int neededPadSpaces = editableTextWidth - newString.length(); + String newPaddedString = String.format("%1$-" + + (neededPadSpaces+1) + "s", newString); + String spacedoutString = String.format("%1$-" + + (editableTextWidth) + "s", + " "); + textEditor.replaceTextRange(leftMost, + spacedoutString.length(), spacedoutString); + textEditor.replaceTextRange(leftMost, + newPaddedString.length(), newPaddedString); + textEditor.setCaretOffset(currentPos - 1); + + + } else if (event.keyCode == SWT.TAB) { + if (!isTemplateOverwriteModeSet) { + if (overwriteMode) { + textEditor.invokeAction(ST.TOGGLE_OVERWRITE); + } else { + } + isTemplateOverwriteModeSet = true; + } + + event.doit = false; + int currentPos = textEditor.getCaretOffset(); + String textUpToCaret = textEditor.getText().substring( + 0, currentPos); + int openBracketPos = textUpToCaret.lastIndexOf("["); + openBracketPos = textEditor.getText().indexOf("[", currentPos); + textEditor.setCaretOffset(openBracketPos + 1); + } + else if (event.keyCode>=97 && event.keyCode <=122 || + event.keyCode>=48 && event.keyCode <=57){ + event.doit = true; + } + } } }); @@ -4076,6 +4154,7 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, * Enter the text editor mode. */ private void enterEditor() { + initTemplateOverwriteMode(); StdTextProduct product = TextDisplayModel.getInstance() .getStdTextProduct(token); if ((product != null) @@ -5119,6 +5198,10 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, body.append("\n"); } body.append(textEditor.getText().trim()); + + if (AFOSParser.isTemplate){ + return removePreformat(body.toString()); + } return body.toString(); } @@ -5249,6 +5332,10 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, productText += ATTACHMENT_STR + statusBarLabel.getText().substring(startIndex); } + + if (AFOSParser.isTemplate) { + productText = removePreformat(productText); + } storedProduct.setProduct(productText.trim()); @@ -6848,7 +6935,9 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, } String textProduct = product.getASCIIProduct(); if ((product.getNnnid() + product.getXxxid()) - .startsWith(AFOSParser.DRAFT_PIL)) { + .startsWith(AFOSParser.DRAFT_PIL) || + (product.getNnnid() + product.getXxxid()) + .startsWith(AFOSParser.MCP_NNN )) { String[] nnnxxx = TextDisplayModel.getNnnXxx(textProduct); String operationalPil = nnnxxx[0] + nnnxxx[1]; String siteNode = SiteAbbreviationUtil.getSiteNode(nnnxxx[1]); @@ -8492,4 +8581,46 @@ public class TextEditorDialog extends CaveSWTDialog implements VerifyListener, return bbb; } } + + private void initTemplateOverwriteMode() { + if (AFOSParser.isTemplate) { + editorInsertCmb.setEnabled(false); + editorCutBtn.setEnabled(false); + editorCopyBtn.setEnabled(false); + editorPasteBtn.setEnabled(false); + editorFillBtn.setEnabled(false); + editorAttachBtn.setEnabled(false); + overStrikeItem.setEnabled(false); + if (!isTemplateOverwriteModeSet) { + if (overwriteMode) { + } else { + textEditor.invokeAction(ST.TOGGLE_OVERWRITE); + } + isTemplateOverwriteModeSet = true; + } + + } + else { + editorInsertCmb.setEnabled(true); + overStrikeItem.setEnabled(true); + editorCutBtn.setEnabled(true); + editorCopyBtn.setEnabled(true); + editorPasteBtn.setEnabled(true); + editorFillBtn.setEnabled(true); + editorAttachBtn.setEnabled(true); + if (isTemplateOverwriteModeSet && !overwriteMode){ + textEditor.invokeAction(ST.TOGGLE_OVERWRITE); + isTemplateOverwriteModeSet=false; + } + if (!isTemplateOverwriteModeSet && overwriteMode){ + textEditor.invokeAction(ST.TOGGLE_OVERWRITE); + } + } + } + + private String removePreformat(String preformattedText) { + String modifiedText = preformattedText.replaceAll("\\[|\\]", " "); + modifiedText = removeSoftReturns(modifiedText); + return modifiedText; + } } diff --git a/edexOsgi/com.raytheon.edex.textdb/src/com/raytheon/edex/textdb/dbapi/impl/AFOSParser.java b/edexOsgi/com.raytheon.edex.textdb/src/com/raytheon/edex/textdb/dbapi/impl/AFOSParser.java index 0a8a967ffb..7317ea4cca 100644 --- a/edexOsgi/com.raytheon.edex.textdb/src/com/raytheon/edex/textdb/dbapi/impl/AFOSParser.java +++ b/edexOsgi/com.raytheon.edex.textdb/src/com/raytheon/edex/textdb/dbapi/impl/AFOSParser.java @@ -92,6 +92,7 @@ import com.raytheon.uf.common.site.SiteMap; * Mar 30, 2011 8561 J. Ortiz Added enterEditor flag. * Jul 29, 2011 10237 R. Ferrel parseCommand now properly validates * commands with large index. + * Jan 29, 2014 DR14595 mgamazaychikov Added handling of M: command * * * @author jkorman @@ -104,6 +105,10 @@ public class AFOSParser { public static final String DRAFT_PIL = "WRKWG"; + public static final String MCP_NNN = "MCP"; + + public static boolean isTemplate = false; + private String productId; private boolean validCommand = false; @@ -143,6 +148,8 @@ public class AFOSParser { */ private boolean parseCommand(String siteId) { + AFOSParser.isTemplate = false; + StringBuilder cmd = new StringBuilder(afosCommand); ccc = SiteMap.getInstance().getCCCFromXXXCode(siteId); @@ -256,6 +263,13 @@ public class AFOSParser { nnn = cmd.substring(0, 3); xxx = cmd.substring(3); return true; + } else if (afosCommand.startsWith("M:")) { + // Remove the M: from afosCommand + cmd.delete(0, 2); + nnn = MCP_NNN; + xxx = cmd.toString(); + AFOSParser.isTemplate = true; + afosCommand = nnn.trim()+xxx.trim(); } else { // Check for SS.NNN request int i = cmd.indexOf(".");