xpdlviewcontrollerpanel.java

来自「jawe的最新版本,基于Java的图形化工作流编辑器。图形化工作流编辑器 。使用」· Java 代码 · 共 335 行

JAVA
335
字号
package org.enhydra.jawe.components.xpdlview;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Dimension;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseWheelEvent;import java.awt.event.MouseWheelListener;import java.io.ByteArrayOutputStream;import javax.swing.BorderFactory;import javax.swing.Box;import javax.swing.BoxLayout;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JComponent;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.SwingConstants;import javax.swing.border.Border;import javax.swing.text.PlainDocument;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.enhydra.jawe.JaWEComponent;import org.enhydra.jawe.JaWEComponentView;import org.enhydra.jawe.JaWEManager;import org.enhydra.jawe.base.controller.JaWEFrame;import org.enhydra.shark.xpdl.XMLAttribute;import org.enhydra.shark.xpdl.XMLCollection;import org.enhydra.shark.xpdl.XMLComplexChoice;import org.enhydra.shark.xpdl.XMLComplexElement;import org.enhydra.shark.xpdl.XMLElement;import org.enhydra.shark.xpdl.XMLSimpleElement;import org.enhydra.shark.xpdl.elements.Package;import org.jedit.syntax.JEditTextArea;import org.jedit.syntax.SyntaxDocument;import org.jedit.syntax.SyntaxStyle;import org.jedit.syntax.TextAreaPainter;import org.jedit.syntax.Token;import org.jedit.syntax.XMLTokenMarker;import org.w3c.dom.Document;import org.w3c.dom.Node;/** *  Container for displaying menubar, toolbar, process graphs ... * *  @author Sasa Bojanic *  @author Miroslav Popov *  @author Zoran Milakovic */public class XPDLViewControllerPanel extends JPanel implements JaWEComponentView {   protected XPDLViewController controller;// protected JScrollPane xpdlPreviewSP;   protected JEditTextArea xpdlPreviewTA;      protected JComboBox searchCB=new JComboBox();   protected Component searchPanel;      protected XMLElement elementToShow;      public XPDLViewControllerPanel(XPDLViewController controller) {      this.controller = controller;   }      public void configure() {         }      public void init() {      setBorder(BorderFactory.createEtchedBorder());      setLayout(new BorderLayout());            add(createCenterComponent(),BorderLayout.CENTER);      searchPanel=createSearchPanel();      add(searchPanel,BorderLayout.NORTH);         }   public JaWEComponent getJaWEComponent() {      return controller;   }   public JComponent getDisplay() {      return this;   }   public void setSelectedElement (XMLElement pkgOrWpOrAs) {      this.elementToShow=pkgOrWpOrAs;      refreshView();   }   public XMLElement getSelectedElement () {      return elementToShow;   }      /**    * Create the center component of this panel.    */   protected Component createCenterComponent() {      // creating text area pane for xpdl preview      xpdlPreviewTA=new JEditTextArea();//      xpdlPreviewTA.setLineWrap(false);//      xpdlPreviewTA.setWrapStyleWord(false);      xpdlPreviewTA.setEditable(false);      xpdlPreviewTA.setMinimumSize(new Dimension(100,100));            xpdlPreviewTA.setElectricScroll(3);      xpdlPreviewTA.addMouseWheelListener(new MouseWheelHandler(xpdlPreviewTA));            Color bkgCol=((XPDLViewSettings)controller.getSettings()).getBackgroundColor();      if (controller.getXPDLViewSettings().showHighlight()) {         SyntaxDocument doc = new SyntaxDocument();         doc.putProperty(PlainDocument.tabSizeAttribute, new Integer(4));               xpdlPreviewTA.setDocument(doc);                  xpdlPreviewTA.setTokenMarker(new XMLTokenMarker());                  TextAreaPainter painter = xpdlPreviewTA.getPainter();         SyntaxStyle[] styles = painter.getStyles();         styles[Token.KEYWORD1] = new SyntaxStyle(new Color(0, 102, 153), false, true);         styles[Token.KEYWORD2] = new SyntaxStyle(new Color(0, 153, 102), false, true);         styles[Token.KEYWORD3] = new SyntaxStyle(new Color(0, 153, 255), false, true);         styles[Token.LITERAL1] = new SyntaxStyle(new Color(255, 0, 204), false, false);         styles[Token.LITERAL2] = new SyntaxStyle(new Color(204, 0, 204), false, false);         painter.setStyles(styles);         painter.setEOLMarkersPainted(false);         painter.setBracketHighlightEnabled(true);         painter.setBackground(bkgCol);      }      xpdlPreviewTA.setBackground(bkgCol);//      xpdlPreviewSP=new JScrollPane();//      xpdlPreviewSP.setViewportView(xpdlPreviewTA);//      JViewport port = xpdlPreviewSP.getViewport();//      port.setScrollMode(JViewport.SIMPLE_SCROLL_MODE);//      return xpdlPreviewSP;      	return xpdlPreviewTA;   }      protected Component createSearchPanel () {      JPanel sp=new JPanel();      sp.setLayout(new BoxLayout(sp,BoxLayout.X_AXIS));            Border emptyb=BorderFactory.createEmptyBorder(5,5,5,5);      sp.setBorder(emptyb);            JLabel jl=new JLabel(controller.getSettings().getLanguageDependentString("SearchForKey")+": ");      jl.setAlignmentX(Component.LEFT_ALIGNMENT);      jl.setAlignmentY(Component.BOTTOM_ALIGNMENT);      jl.setHorizontalAlignment(SwingConstants.RIGHT);            searchCB.setEditable(true);      searchCB.setAlignmentX(Component.LEFT_ALIGNMENT);      searchCB.setAlignmentY(Component.BOTTOM_ALIGNMENT);      Dimension comboBoxDimension=new Dimension(200,20);      searchCB.setMinimumSize(new Dimension(comboBoxDimension));      searchCB.setMaximumSize(new Dimension(comboBoxDimension));      searchCB.setPreferredSize(new Dimension(comboBoxDimension));      Color bkgCol=((XPDLViewSettings)controller.getSettings()).getBackgroundColor();      searchCB.setBackground(bkgCol);      searchCB.getEditor().getEditorComponent().setBackground(bkgCol);            JButton jb=new JButton("");      jb.setIcon(controller.getXPDLViewSettings().getFindNextIcon());      jb.setToolTipText(controller.getSettings().getLanguageDependentString("FindNextStringOccuranceKey"));      jb.setVerticalTextPosition(SwingConstants.CENTER);      jb.setAlignmentX(Component.LEFT_ALIGNMENT);      jb.setAlignmentY(Component.BOTTOM_ALIGNMENT);      jb.setPreferredSize(new Dimension(20,20));            sp.add(jl);      sp.add(searchCB);      sp.add(Box.createHorizontalStrut(5));      sp.add(jb);            jb.addActionListener(new ActionListener(){                              public void actionPerformed( ActionEvent ae ){                                 findString();                              }                           });            return sp;   }      public void refreshView () {      try {         String toDisp="";         xpdlPreviewTA.setText(toDisp);                  Document document = null;                           DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();         DocumentBuilder dbuilder = dbf.newDocumentBuilder();         document = dbuilder.newDocument();         ByteArrayOutputStream baos=new ByteArrayOutputStream();                  // Here we get all document elements         if (elementToShow!=null) {                        if (!(elementToShow instanceof XMLAttribute)) {               if (elementToShow instanceof Package) {                  JaWEManager.getInstance().getXPDLHandler().getXPDLRepositoryHandler().toXML(document, (Package)elementToShow);               } else {                  Node node = document.createElement(elementToShow.toName());                  if (elementToShow instanceof XMLComplexElement) {                     JaWEManager.getInstance().getXPDLHandler().getXPDLRepositoryHandler().toXML(node, (XMLComplexElement)elementToShow);                  } else if (elementToShow instanceof XMLCollection) {                     JaWEManager.getInstance().getXPDLHandler().getXPDLRepositoryHandler().toXML(node, (XMLCollection)elementToShow);                  } else if (elementToShow instanceof XMLComplexChoice) {                     JaWEManager.getInstance().getXPDLHandler().getXPDLRepositoryHandler().toXML(node, (XMLComplexChoice)elementToShow);                  } else if (elementToShow instanceof XMLSimpleElement) {                     JaWEManager.getInstance().getXPDLHandler().getXPDLRepositoryHandler().toXML(node, (XMLSimpleElement)elementToShow);                  }                  Node toAppend=node.getFirstChild();                  if (toAppend==null) {                     toAppend=node;                  }                  document.appendChild(toAppend);               }               // Use a Transformer for output               TransformerFactory tFactory =               TransformerFactory.newInstance();               Transformer transformer = tFactory.newTransformer();               transformer.setOutputProperty("indent","yes");               transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","4");               transformer.setOutputProperty("encoding", JaWEManager.getInstance().getJaWEController().getControllerSettings().getEncoding());               if (!(elementToShow instanceof Package)) {                  transformer.setOutputProperty("omit-xml-declaration","yes");               }               DOMSource source = new DOMSource(document);               StreamResult result = new StreamResult(baos);               transformer.transform(source,result);                              toDisp=baos.toString(JaWEManager.getInstance().getJaWEController().getControllerSettings().getEncoding());               baos.close();                           } else {               toDisp=elementToShow.toName()+"="+"\""+elementToShow.toValue()+"\"";            }                                             }                  xpdlPreviewTA.setText(toDisp);         xpdlPreviewTA.setCaretPosition(0);      } catch (Exception ex) {         ex.printStackTrace();      }   }      /**    * Searches the XPDL context containd within text area to find wanted    * string. Search starts from the current cursor location. When some    * new text is entered into search box, it can be latter retrieved from    * the box.    */   protected void findString() {      if (searchCB.getSelectedItem()==null) return;      String searchingTxt=searchCB.getSelectedItem().toString();      addItemToCombo(searchingTxt);      String txt = xpdlPreviewTA.getText();      try {         int foundPos=xpdlPreviewTA.getCaretPosition();         for(int i=foundPos;i<=(txt.length() - searchingTxt.length());i++) {            if(txt.substring(i,i + searchingTxt.length()).equalsIgnoreCase(searchingTxt)) {               xpdlPreviewTA.setCaretPosition(i);//               xpdlPreviewTA.getCaret().setSelectionVisible(true);               xpdlPreviewTA.select(i,i+searchingTxt.length());               foundPos = i+searchingTxt.length();               return;            }         }      } catch (Exception ex) {}      JaWEFrame jf=JaWEManager.getInstance().getJaWEController().getJaWEFrame();      JOptionPane.showMessageDialog(jf,                                    controller.getSettings().getLanguageDependentString("MessageJaWEHasFinishedSearchingXPDL"),                                    jf.getAppTitle(),JOptionPane.INFORMATION_MESSAGE);      xpdlPreviewTA.setCaretPosition(0);      return;   }      /**    * Adds a text into combo box if it hasn't been there previously.    */   private void addItemToCombo (String searchingTxt) {      if (searchingTxt==null || searchingTxt.trim().length()==0) return;      for (int i=0; i<searchCB.getItemCount(); i++) {         if (searchCB.getItemAt(i).toString().equals(searchingTxt)) {            return;         }      }      searchCB.addItem(searchingTxt);   }      public void changeLanguage () {      JLabel l=(JLabel)((JPanel)searchPanel).getComponent(0);      JButton b=(JButton)((JPanel)searchPanel).getComponent(3);      l.setText(controller.getSettings().getLanguageDependentString("SearchForKey")+": ");      b.setToolTipText(controller.getSettings().getLanguageDependentString("FindNextStringOccuranceKey"));   }   }class MouseWheelHandler implements MouseWheelListener{    JEditTextArea area;    public MouseWheelHandler(JEditTextArea area) {        this.area = area;    }    public void mouseWheelMoved(MouseWheelEvent e)    {           if(e.isControlDown())        {   if( (area.getFirstLine() + e.getWheelRotation()) < 0 || ((area.getFirstLine() + area.getVisibleLines() + e.getWheelRotation()) > area.getLineCount()) )                return;            area.setFirstLine(area.getFirstLine()                + e.getWheelRotation());        } else         {            if( (area.getFirstLine() + e.getUnitsToScroll()) < 0 || ((area.getFirstLine() + area.getVisibleLines() + e.getUnitsToScroll()) > area.getLineCount()) )                return;            area.setFirstLine(area.getFirstLine()                + e.getUnitsToScroll());        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?