From 57f1148aeae8f8991098f04f8de08ce8feccebac Mon Sep 17 00:00:00 2001 From: yaoguangluo Date: Mon, 11 Feb 2019 10:31:55 +0800 Subject: [PATCH 01/14] =?UTF-8?q?=E8=BF=90=E7=BB=B4=E7=95=8C=E9=9D=A2?= =?UTF-8?q?=E9=87=87=E7=94=A8=E6=9C=80=E6=96=B0ETL=20=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .classpath | 2 +- UI/GUIBuild/GUIsample3.java | 90 +++++++++--------- UI/org/LYG/GUI/Flash/GUIsample3.java | 40 ++++---- UI/org/LYG/GUI/OSGI/objectInterface.java | 1 - UI/org/LYG/GUI/extOSGI/OSGI_chansfer.java | 46 ++++----- UI/org/LYG/GUI/nodeEdit/ChooseCheck.java | 68 +++++++------ UI/org/LYG/GUI/nodeEdit/DrawArrow.java | 11 ++- UI/org/LYG/GUI/nodeEdit/LinkList.java | 3 +- UI/org/LYG/GUI/nodeProject/logo.png | Bin 66490 -> 0 bytes UI/org/LYG/GUI/nodeProject/nodeProject.java | 17 ++-- UI/org/LYG/GUI/nodeView/cacuString.java | 9 +- UI/org/LYG/GUI/nodeView/nodeShow.java | 9 -- .../LYG/GUI/platForm/unicornSplitPaneUI.java | 3 - 13 files changed, 145 insertions(+), 154 deletions(-) delete mode 100644 UI/org/LYG/GUI/nodeProject/logo.png diff --git a/.classpath b/.classpath index 2d6a00b..dd30a1f 100644 --- a/.classpath +++ b/.classpath @@ -1,8 +1,8 @@ - + diff --git a/UI/GUIBuild/GUIsample3.java b/UI/GUIBuild/GUIsample3.java index f30fce5..4bd2e5f 100644 --- a/UI/GUIBuild/GUIsample3.java +++ b/UI/GUIBuild/GUIsample3.java @@ -46,23 +46,24 @@ import org.LYG.GUI.nodeView.cacuString; import org.LYG.GUI.nodeView.nodeShow; import org.LYG.GUI.platForm.unicornJSplitPane; -public class GUIsample3 extends JApplet implements MouseMotionListener, MouseListener,ItemListener,ActionListener,Runnable{ +public class GUIsample3 extends JApplet implements MouseMotionListener, MouseListener +, ItemListener, ActionListener, Runnable{ private static final long serialVersionUID = 5270675501794340912L; public GUIsample3() { //getContentPane().setBackground(new Color(218,112,214)); getContentPane().setBackground(new Color(255,255,255)); } - public int w,h; - int flash=0; - int count=0; + public int w, h; + int flash = 0; + int count = 0; String currentNodeName; int currentNodeID; LinkList thislist; LinkNode first; - int currentx,currenty; - int choose=0; - int oldx,oldy; - int newx,newy; + int currentx, currenty; + int choose = 0; + int oldx, oldy; + int newx, newy; int isOperation = 0; String treeNodeName; nodeShow nodeview; @@ -76,19 +77,19 @@ public GUIsample3() { JScrollPane rightdownscrollPane; JScrollPane rightrightscrollPane; thisCanvas canvas; - PopupMenu popupMenu1,nodeMenu,itemMenu; + PopupMenu popupMenu1, nodeMenu, itemMenu; MenuItem menuItem1; - MenuItem configre,run,show,dnode,dline; - Thread thread,thread1; + MenuItem configre, run, show, dnode, dline; + Thread thread, thread1; public void run() { try { Thread.sleep(100); } catch (InterruptedException e1) { e1.printStackTrace(); } - nodeproject.setBounds(0, 0,leftsplitPane.getWidth(),leftsplitPane.getDividerLocation()); + nodeproject.setBounds(0, 0, leftsplitPane.getWidth(), leftsplitPane.getDividerLocation()); nodeproject.jPanel.newimg = nodeproject.img.getScaledInstance(nodeproject.getWidth() - ,nodeproject.getHeight(),java.awt.Image.SCALE_SMOOTH ); + , nodeproject.getHeight(), java.awt.Image.SCALE_SMOOTH); nodeproject.jPanel.update(getGraphics()); nodeproject.validate(); while(true){ @@ -105,6 +106,7 @@ public void start(){ thread.start(); } } + public void stop() { } @@ -122,6 +124,7 @@ public void propertyChange(java.beans.PropertyChangeEvent evt) { } } }); + mainsplitPane.addPropertyChangeListener(new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent evt) { if (evt.getPropertyName().equals(JSplitPane.DIVIDER_LOCATION_PROPERTY)) { @@ -134,6 +137,7 @@ public void propertyChange(java.beans.PropertyChangeEvent evt) { } } }); + righttopscrollPane.addComponentListener(new ComponentListener(){ public void componentHidden(ComponentEvent arg0) {} public void componentMoved(ComponentEvent arg0) {} @@ -142,14 +146,11 @@ public void componentResized(ComponentEvent arg0) { } public void componentShown(ComponentEvent arg0) {} }); + getContentPane().addComponentListener(new ComponentListener(){ - public void componentHidden(ComponentEvent arg0) {} - public void componentMoved(ComponentEvent arg0) {} - public void componentResized(ComponentEvent arg0) { - // TODO Auto-generated method stub w=getContentPane().getWidth(); h=getContentPane().getHeight(); mainsplitPane.setBounds(10, 50, w-20, h-80); @@ -165,7 +166,7 @@ public void componentResized(ComponentEvent arg0) { nodeproject.validate(); mainsplitPane.validate(); - System.out.println(w+"<>"+h); + System.out.println(w + "<>" + h); } public void componentShown(ComponentEvent arg0) { @@ -224,8 +225,8 @@ public void actionPerformed(ActionEvent e) { node.thisface.thispanel.setSize(300, 300);//setBounds(0, 0, node.x+300,node.y+200); node.thisface.thispanel.setResizable(true); node.thisface.thispanel.setClosable(true); - node.thisface.thispanel.jsp.setBounds(0, 0, node.thisface.thispanel.getWidth()-10 - , node.thisface.thispanel.getHeight()-45); + node.thisface.thispanel.jsp.setBounds(0, 0, node.thisface.thispanel.getWidth() - 10 + , node.thisface.thispanel.getHeight() - 45); node.thisface.thispanel.jp.setPreferredSize(new Dimension(800,600)); canvas.add(node.thisface.thispanel); node.thisface.thispanel.setVisible(true); @@ -233,8 +234,8 @@ public void actionPerformed(ActionEvent e) { new OSGI_chansfer(node,first); } while(node.next != null){ - node=node.next; - if(node.name.equals(currentNodeName)&&node.ID==currentNodeID){ + node = node.next; + if(node.name.equals(currentNodeName)&&node.ID == currentNodeID){ try { node.thisface.config(); } catch (IOException e1) { @@ -273,9 +274,8 @@ public void actionPerformed(ActionEvent e) { } catch (InterruptedException e3) { e3.printStackTrace(); } - } - while(node.next!=null){ + while(null != node.next){ node=node.next; if(node.name.equals(currentNodeName)&&node.ID==currentNodeID){ try { @@ -441,27 +441,27 @@ public void mouseEntered(MouseEvent arg0) {} public void mouseExited(MouseEvent arg0) {} public void mousePressed(MouseEvent arg0) { - isOperation = 1; - //System.out.println(arg0.getX()+"|"+arg0.getY()); + isOperation=1; + System.out.println(arg0.getX()+"|"+arg0.getY()); oldx = arg0.getX(); oldy = arg0.getY(); - currentx = arg0.getX(); - currenty = arg0.getY(); - currentNodeName = new ChooseCheck().chooseCheckname(first,arg0); - currentNodeID = new ChooseCheck().chooseCheckid(first,arg0); + currentx=arg0.getX(); + currenty=arg0.getY(); + currentNodeName=new ChooseCheck().chooseCheckname(first,arg0); + currentNodeID=new ChooseCheck().chooseCheckid(first,arg0); } public void mouseReleased(MouseEvent arg0){ - isOperation = 0; - currentx = arg0.getX(); - currenty = arg0.getY(); - first = new Sort().sort(first); - LinkNode node = new LinkNode(); - node = first; - if(node != null){ - if(node.rightchoose && !node.leftchoose){ - if(oldx == arg0.getX() && oldy == arg0.getY()){ + isOperation=0; + currentx=arg0.getX(); + currenty=arg0.getY(); + first=new Sort().sort(first); + LinkNode node=new LinkNode(); + node=first; + if(node!=null){ + if(node.rightchoose&&!node.leftchoose){ + if(oldx==arg0.getX()&&oldy==arg0.getY()){ nodeMenu.show(this, arg0.getX(), arg0.getY()); } else{ @@ -469,11 +469,11 @@ public void mouseReleased(MouseEvent arg0){ } } node.setchoose(false); - node.rightchoose = false; - while(node.next != null){ - node = node.next; - if(node.rightchoose && !node.leftchoose){ - if(oldx == arg0.getX()&&oldy==arg0.getY()){ + node.rightchoose=false; + while(node.next!=null){ + node=node.next; + if(node.rightchoose&&!node.leftchoose){ + if(oldx==arg0.getX()&&oldy==arg0.getY()){ nodeMenu.show(this, arg0.getX(), arg0.getY()); } else{ @@ -674,7 +674,7 @@ public void init(){ this.resize(w,h); } private void CreatMap() throws IOException { - w=1420; + w=1400; h=800; getContentPane().setLayout(null); UIManager.put("SplitPaneUI","org.LYG.GUI.platForm.unicornSplitPaneUI"); diff --git a/UI/org/LYG/GUI/Flash/GUIsample3.java b/UI/org/LYG/GUI/Flash/GUIsample3.java index 07a3014..9ad9252 100644 --- a/UI/org/LYG/GUI/Flash/GUIsample3.java +++ b/UI/org/LYG/GUI/Flash/GUIsample3.java @@ -46,23 +46,23 @@ import org.LYG.GUI.nodeView.cacuString; import org.LYG.GUI.nodeView.nodeShow; import org.LYG.GUI.platForm.unicornJSplitPane; -public class GUIsample3 extends JApplet implements MouseMotionListener, MouseListener,ItemListener,ActionListener,Runnable{ +public class GUIsample3 extends JApplet implements MouseMotionListener, MouseListener, ItemListener, ActionListener, Runnable{ private static final long serialVersionUID = 5270675501794340912L; public GUIsample3() { //getContentPane().setBackground(new Color(218,112,214)); getContentPane().setBackground(new Color(255,255,255)); } - public int w,h; - int flash=0; - int count=0; + public int w, h; + int flash = 0; + int count = 0; String currentNodeName; int currentNodeID; LinkList thislist; LinkNode first; int currentx,currenty; - int choose=0; - int oldx,oldy; - int newx,newy; + int choose = 0; + int oldx, oldy; + int newx, newy; String treeNodeName; nodeShow nodeview; nodeProject nodeproject; @@ -86,8 +86,9 @@ public void run() { } catch (InterruptedException e1) { e1.printStackTrace(); } - nodeproject.setBounds(0, 0,leftsplitPane.getWidth(),leftsplitPane.getDividerLocation()); - nodeproject.jPanel.newimg = nodeproject.img.getScaledInstance(nodeproject.getWidth(),nodeproject.getHeight(),java.awt.Image.SCALE_SMOOTH ); + nodeproject.setBounds(0, 0, leftsplitPane.getWidth(), leftsplitPane.getDividerLocation()); + nodeproject.jPanel.newimg = nodeproject.img.getScaledInstance(nodeproject.getWidth() + , nodeproject.getHeight(),java.awt.Image.SCALE_SMOOTH ); nodeproject.jPanel.update(getGraphics()); nodeproject.validate(); while(true) { @@ -114,10 +115,10 @@ public void propertyChange(java.beans.PropertyChangeEvent evt) { if (evt.getPropertyName().equals(JSplitPane.DIVIDER_LOCATION_PROPERTY)) { //action code nodeproject.setBounds(0, 0,leftsplitPane.getWidth(),leftsplitPane.getDividerLocation()); - nodeproject.jPanel.newimg = nodeproject.img.getScaledInstance(nodeproject.getWidth(),nodeproject.getHeight(),java.awt.Image.SCALE_SMOOTH ); + nodeproject.jPanel.newimg = nodeproject.img.getScaledInstance(nodeproject.getWidth() + , nodeproject.getHeight(),java.awt.Image.SCALE_SMOOTH); nodeproject.jPanel.repaint(); nodeproject.validate(); - } } }); @@ -126,7 +127,8 @@ public void propertyChange(java.beans.PropertyChangeEvent evt) { if (evt.getPropertyName().equals(JSplitPane.DIVIDER_LOCATION_PROPERTY)) { //action code nodeproject.setBounds(0, 0,mainsplitPane.getDividerLocation(),leftsplitPane.getDividerLocation()); - nodeproject.jPanel.newimg = nodeproject.img.getScaledInstance(nodeproject.getWidth(),nodeproject.getHeight(),java.awt.Image.SCALE_SMOOTH ); + nodeproject.jPanel.newimg = nodeproject.img.getScaledInstance(nodeproject.getWidth() + , nodeproject.getHeight(),java.awt.Image.SCALE_SMOOTH ); nodeproject.jPanel.repaint(); nodeproject.validate(); } @@ -152,7 +154,8 @@ public void componentResized(ComponentEvent arg0) { rightsplitPane.setDividerLocation(0.85); righttopsplitPane.setDividerLocation(0.9); nodeproject.setBounds(0, 0,mainsplitPane.getDividerLocation(),leftsplitPane.getDividerLocation()); - nodeproject.jPanel.newimg = nodeproject.img.getScaledInstance(nodeproject.getWidth(),nodeproject.getHeight(),java.awt.Image.SCALE_SMOOTH ); + nodeproject.jPanel.newimg = nodeproject.img.getScaledInstance(nodeproject.getWidth() + , nodeproject.getHeight(),java.awt.Image.SCALE_SMOOTH ); nodeproject.jPanel.repaint(); nodeproject.validate(); mainsplitPane.validate(); @@ -232,7 +235,8 @@ public void actionPerformed(ActionEvent e) { node.thisface.thispanel.setLocation(node.x, node.y); node.thisface.thispanel.setSize(300, 300);//setBounds(0, 0, node.x+300,node.y+200); node.thisface.thispanel.setResizable(true); - node.thisface.thispanel.setClosable(true);node.thisface.thispanel.jsp.setBounds(0, 0, node.thisface.thispanel.getWidth()-10, node.thisface.thispanel.getHeight()-45); + node.thisface.thispanel.setClosable(true);node.thisface.thispanel.jsp.setBounds(0, 0 + , node.thisface.thispanel.getWidth()-10, node.thisface.thispanel.getHeight()-45); node.thisface.thispanel.jp.setPreferredSize(new Dimension(800,600)); canvas.add(node.thisface.thispanel); node.thisface.thispanel.setVisible(true); @@ -297,7 +301,8 @@ public void actionPerformed(ActionEvent e) { node.thisface.thisview.setLocation(node.x, node.y); node.thisface.thisview.setSize(300, 300);//setBounds(0, 0, node.x+300,node.y+200); node.thisface.thisview.setResizable(true); - node.thisface.thisview.setClosable(true);node.thisface.thisview.jsp.setBounds(0, 0, node.thisface.thispanel.getWidth()-10, node.thisface.thispanel.getHeight()-45); + node.thisface.thisview.setClosable(true);node.thisface.thisview.jsp.setBounds(0, 0 + , node.thisface.thispanel.getWidth()-10, node.thisface.thispanel.getHeight()-45); node.thisface.thisview.jp.setPreferredSize(new Dimension(800,600)); canvas.add(node.thisface.thisview); node.thisface.thisview.setVisible(true); @@ -319,7 +324,8 @@ public void actionPerformed(ActionEvent e) { node.thisface.thisview.setLocation(node.x, node.y); node.thisface.thisview.setSize(300, 300);//setBounds(0, 0, node.x+300,node.y+200); node.thisface.thisview.setResizable(true); - node.thisface.thisview.setClosable(true);node.thisface.thisview.jsp.setBounds(0, 0, node.thisface.thispanel.getWidth()-10, node.thisface.thispanel.getHeight()-45); + node.thisface.thisview.setClosable(true);node.thisface.thisview.jsp.setBounds(0, 0 + , node.thisface.thispanel.getWidth()-10, node.thisface.thispanel.getHeight()-45); node.thisface.thisview.jp.setPreferredSize(new Dimension(800,600)); canvas.add(node.thisface.thisview); node.thisface.thisview.setVisible(true); @@ -502,7 +508,6 @@ public void mouseDragged(MouseEvent e) { } } public void mouseMoved(MouseEvent arg0) { - // TODO Auto-generated method stub } public void update(){ Graphics g=getGraphics(); @@ -631,7 +636,6 @@ public void init(){ try { CreatMap(); } catch (IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); } Registrar(); diff --git a/UI/org/LYG/GUI/OSGI/objectInterface.java b/UI/org/LYG/GUI/OSGI/objectInterface.java index 303e86c..281a73d 100644 --- a/UI/org/LYG/GUI/OSGI/objectInterface.java +++ b/UI/org/LYG/GUI/OSGI/objectInterface.java @@ -2,7 +2,6 @@ import java.awt.Image; import java.io.FileNotFoundException; import java.io.IOException; - import javax.sound.sampled.UnsupportedAudioFileException; import javax.swing.ImageIcon; public class objectInterface implements Cloneable{ diff --git a/UI/org/LYG/GUI/extOSGI/OSGI_chansfer.java b/UI/org/LYG/GUI/extOSGI/OSGI_chansfer.java index 5c31107..a386282 100644 --- a/UI/org/LYG/GUI/extOSGI/OSGI_chansfer.java +++ b/UI/org/LYG/GUI/extOSGI/OSGI_chansfer.java @@ -3,40 +3,40 @@ import org.LYG.GUI.nodeEdit.LinkNode; public class OSGI_chansfer { public OSGI_chansfer(LinkNode node, LinkNode first){ - first=new Sort().sort(first); - LinkNode node1=new LinkNode(); - node1=first; - if(node1!=null){ - if(node.tbeconnect&&node.tbeconnectID==node1.ID&&node.tbeconnetName.equals(node1.name)){ - node.thisface.thisrun.toptablein=node1.thisface.thisview.tableout; - node.thisface.thisrun.topgin=node1.thisface.thisview.gout; + first = new Sort().sort(first); + LinkNode node1 = new LinkNode(); + node1 = first; + if(null != node1){ + if(node.tbeconnect&&node.tbeconnectID == node1.ID&&node.tbeconnetName.equals(node1.name)){ + node.thisface.thisrun.toptablein = node1.thisface.thisview.tableout; + node.thisface.thisrun.topgin = node1.thisface.thisview.gout; return; } - if(node.mbeconnect&&node.mbeconnectID==node1.ID&&node.mbeconnetName.equals(node1.name)){ - node.thisface.thisrun.midtablein=node1.thisface.thisview.tableout; - node.thisface.thisrun.midgin=node1.thisface.thisview.gout; + if(node.mbeconnect&&node.mbeconnectID == node1.ID&&node.mbeconnetName.equals(node1.name)){ + node.thisface.thisrun.midtablein = node1.thisface.thisview.tableout; + node.thisface.thisrun.midgin = node1.thisface.thisview.gout; return; } - if(node.dbeconnect&&node.dbeconnectID==node1.ID&&node.dbeconnetName.equals(node1.name)){ - node.thisface.thisrun.downtablein=node1.thisface.thisview.tableout; - node.thisface.thisrun.downgin=node1.thisface.thisview.gout; + if(node.dbeconnect&&node.dbeconnectID == node1.ID&&node.dbeconnetName.equals(node1.name)){ + node.thisface.thisrun.downtablein = node1.thisface.thisview.tableout; + node.thisface.thisrun.downgin = node1.thisface.thisview.gout; return; } - while(node1.next!=null){ + while(null != node1.next){ node1=node1.next; - if(node.tbeconnect&&node.tbeconnectID==node1.ID&&node.tbeconnetName.equals(node1.name)){ - node.thisface.thisrun.toptablein=node1.thisface.thisview.tableout; - node.thisface.thisrun.topgin=node1.thisface.thisview.gout; + if(node.tbeconnect&&node.tbeconnectID == node1.ID&&node.tbeconnetName.equals(node1.name)){ + node.thisface.thisrun.toptablein = node1.thisface.thisview.tableout; + node.thisface.thisrun.topgin = node1.thisface.thisview.gout; return; } - if(node.mbeconnect&&node.mbeconnectID==node1.ID&&node.mbeconnetName.equals(node1.name)){ - node.thisface.thisrun.midtablein=node1.thisface.thisview.tableout; - node.thisface.thisrun.midgin=node1.thisface.thisview.gout; + if(node.mbeconnect&&node.mbeconnectID == node1.ID&&node.mbeconnetName.equals(node1.name)){ + node.thisface.thisrun.midtablein = node1.thisface.thisview.tableout; + node.thisface.thisrun.midgin = node1.thisface.thisview.gout; return; } - if(node.dbeconnect&&node.dbeconnectID==node1.ID&&node.dbeconnetName.equals(node1.name)){ - node.thisface.thisrun.downtablein=node1.thisface.thisview.tableout; - node.thisface.thisrun.downgin=node1.thisface.thisview.gout; + if(node.dbeconnect&&node.dbeconnectID == node1.ID&&node.dbeconnetName.equals(node1.name)){ + node.thisface.thisrun.downtablein = node1.thisface.thisview.tableout; + node.thisface.thisrun.downgin = node1.thisface.thisview.gout; return; } } diff --git a/UI/org/LYG/GUI/nodeEdit/ChooseCheck.java b/UI/org/LYG/GUI/nodeEdit/ChooseCheck.java index 9219d86..5195b08 100644 --- a/UI/org/LYG/GUI/nodeEdit/ChooseCheck.java +++ b/UI/org/LYG/GUI/nodeEdit/ChooseCheck.java @@ -1,36 +1,34 @@ package org.LYG.GUI.nodeEdit; - import java.awt.event.MouseEvent; - public class ChooseCheck{ public ChooseCheck() {} - public int chooseCheckid(LinkNode first,MouseEvent arg0) { + public int chooseCheckid(LinkNode first, MouseEvent arg0) { LinkNode node=new LinkNode(); first=new Sort().sort(first);; node=first; int x,y; - x=arg0.getX(); - y=arg0.getY(); - if(node!=null){ + x = arg0.getX(); + y = arg0.getY(); + if(node != null){ //x -= node.x; //y -= node.y; //x=Math.abs(x); //y=Math.abs(y); - if((x>node.x)&&(xnode.y)&&(y node.x) && (x < node.x + 50) && (y > node.y) && (y < node.y + 50)){ + if(arg0.getButton() == 1){ + node.leftchoose = true; } - if(arg0.getButton()==3){ - node.rightchoose=true; + if(arg0.getButton() == 3){ + node.rightchoose = true; } return node.ID; } - while(node.next!=null){ - x=arg0.getX(); - y=arg0.getY(); - node=node.next; - if((x>node.x)&&(xnode.y)&&(y node.x) && (x < node.x + 50) && (y > node.y) && (y < node.y + 50)){ if(arg0.getButton()==1){ node.leftchoose=true; } @@ -44,32 +42,32 @@ public int chooseCheckid(LinkNode first,MouseEvent arg0) { return 0; } public String chooseCheckname(LinkNode first,MouseEvent arg0) { - LinkNode node=new LinkNode(); - first=new Sort().sort(first); - node=first; + LinkNode node = new LinkNode(); + first = new Sort().sort(first); + node = first; int x,y; - x=arg0.getX(); - y=arg0.getY(); - if(node!=null){ - if((x>node.x)&&(xnode.y)&&(y node.x) && (x < node.x + 50) && (y > node.y) && (y < node.y + 50)){ + if(arg0.getButton() == 1){ node.leftchoose=true; } - if(arg0.getButton()==3){ - node.rightchoose=true; + if(arg0.getButton() == 3){ + node.rightchoose = true; } return node.name; } - while(node.next!=null){ - x=arg0.getX(); - y=arg0.getY(); - node=node.next; - if((x>node.x)&&(xnode.y)&&(y node.x) && (x < node.x + 50) && (y>node.y) && (y < node.y + 50)){ + if(arg0.getButton() == 1){ + node.leftchoose = true; } - if(arg0.getButton()==3){ - node.rightchoose=true; + if(arg0.getButton() == 3){ + node.rightchoose = true; } return node.name; } diff --git a/UI/org/LYG/GUI/nodeEdit/DrawArrow.java b/UI/org/LYG/GUI/nodeEdit/DrawArrow.java index 4d3f1cf..74037e1 100644 --- a/UI/org/LYG/GUI/nodeEdit/DrawArrow.java +++ b/UI/org/LYG/GUI/nodeEdit/DrawArrow.java @@ -2,11 +2,14 @@ import java.awt.*; public class DrawArrow{ public DrawArrow(Graphics2D g2, int x, int y, int connectx, int connecty) { + x += 10; + connectx -= 10; g2.setStroke(new BasicStroke(2, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_ROUND)); - g2.drawLine(x,y,connectx,connecty); - g2.drawPolygon(getArrow(x, y, connectx, connecty, 18, 0,0.5)); - g2.fillPolygon(getArrow(x, y, connectx, connecty, 18, 0,0.5)); + g2.drawLine(x, y, connectx, connecty); + g2.drawPolygon(getArrow(x, y, connectx, connecty, 10, 0,0.5)); + g2.fillPolygon(getArrow(x, y, connectx, connecty, 10, 0,0.5)); } + public Polygon getArrow(int x1, int y1, int x2, int y2, int headsize, int difference, double factor){ int[] crosslinebase = getArrowHeadLine(x1, y1, x2, y2, headsize); int[] headbase = getArrowHeadLine(x1, y1, x2, y2, headsize - difference); @@ -20,6 +23,7 @@ public Polygon getArrow(int x1, int y1, int x2, int y2, int headsize, int differ head.addPoint(x1, y1); return head; } + private int[] getArrowHeadCrossLine(int x1, int x2, int b1, int b2, double factor){ int [] crossline = new int[4]; int xdest = (int) (((b1 - x1)*factor) + x1); @@ -30,6 +34,7 @@ private int[] getArrowHeadCrossLine(int x1, int x2, int b1, int b2, double facto crossline[3] = crossline[1] + (x2-crossline[1])*2; return crossline; } + private int[] getArrowHeadLine(int xsource,int ysource,int xdest,int ydest, int distance){ int[] arrowhead = new int[2]; int headsize = distance; diff --git a/UI/org/LYG/GUI/nodeEdit/LinkList.java b/UI/org/LYG/GUI/nodeEdit/LinkList.java index 8dcfffe..54a6a60 100644 --- a/UI/org/LYG/GUI/nodeEdit/LinkList.java +++ b/UI/org/LYG/GUI/nodeEdit/LinkList.java @@ -26,7 +26,8 @@ public boolean search(LinkNode first2,String key){ } return false; } - public LinkNode addNode(LinkNode first2, String treeNodeName,int x,int y,nodeOSGI nOSGI ) throws CloneNotSupportedException, InstantiationException, IllegalAccessException, IOException { + public LinkNode addNode(LinkNode first2, String treeNodeName,int x,int y,nodeOSGI nOSGI ) + throws CloneNotSupportedException, InstantiationException, IllegalAccessException, IOException { nodeOSGI currentOSGI=nOSGI; while(currentOSGI!=null&¤tOSGI.pre!=null){ currentOSGI=currentOSGI.pre; diff --git a/UI/org/LYG/GUI/nodeProject/logo.png b/UI/org/LYG/GUI/nodeProject/logo.png deleted file mode 100644 index 95075dc075d860bddf0d73126e00f0cce27e4399..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66490 zcmbSxQ*b3*@Mmn>wl%SN`3Hy1v6i&Ss{ zDU$52lKorV-KQI$EGIszCtW!YnlB%|N3Z;~J>N^>7SFwHZ{v`CbaVooX z`!{$J@r$0x5V1TWykEX0{TmX2JfhDefc1}?mQ|HuL&~wccpxA2Hkx5^taji1{R!b1 zQQ#!wAz!aAF1;hxokwEz7+;TgU~xpBc+A0uMU?BX*V_OLNn6Zy3)^Es1QYjE&@#UTP4h(`%gCU4+e+Q-)6pc58n|9z+tJ9Y! z^2U(PYjRgFUV6X|goWM?pbHlxt$p1X=suw9qksmy5eE5T-PHp+4~+jKkH1_$C6Y*i z+`Ndsy*}t2oA-etsNc}DWb+p2#=xrjzBhaI%H9UU6`;WN>sy~0Lbow)A0Udy=GaiM zpSDkHp|@RY1Gm13@{b|tF;%%$hUp98M;vfR4grMX_O5y+Vsh7(G&3gVPY(_7uT>Qa z%QlqDIS9XjgN{n+<4!Ne_KzhR6X`v|dfh6O6CIf)1RQ(h-!tdmIQ^DE=#~Z_{0#H? zc()ocES|rMXD#j5vSO|DQ)%69SATjTxz})bpymMm^If~7#PN@%7!%oMK>#^O$w`~D z?)zLljpo<;dVmf9fo;(chE-tyDYGl%H__EiVLxu^e}d}^Hyf+paYrB;nrX`o{=Ph5 zwdNgV7kz2#>9rE@-$?Acc$odCT}mc^}>mPHUG|V|FjNo zc(Jp&OV~bVWh%X@b>?{>gs6A>CiCpf9y)mjGyH3S@l0U zko6{x@>>pz*FwD)BXj#Kc-!v$_ZW?L^Z#|F|74a-G1j-k{y*#xo1QxH1ON9y)x*~p z0qMXt`b{RiZQlmb4|JkNP!Rk(hbjw z#)7}r>26mdUM*E05vUE&o%2bCFK(a6l@C*Lp5Be?bH3fS{fcov_#t`o9>P_3^%(Z^ z=6^@5p#bIJ@Xi=!9Ue#1m$w|WYF9v)9{GdL5ItLbX6ZXcixm4PgeyT8Ozh9bo@-YSm!nGV;HVo@Pqu_?1!?yg-zkUz)=y!v!s}(-4CFAT)RP`TM z?$IMHy1rdo_S_rpUHVilo!bc{@afF5`0=Ep2Y0UgnTloEGiB>mDDS~dO-*8bs}3Hz zxfZ23d%_Xud^EF(os)h&y7l_5UD*mWC7p|BTzZP<^S4#2u{8$qz=~ytu!dQ^ml%{9 zo(r#9lEPT34-KQ_OXZgRsOu%0A4J~$H-11Ke4m~@DzBHS@oQfPy6d)$tJMp)>g8!s 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≫SVF&|QZ8@jc7`}WmZHACpU0OHN{ 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 Date: Mon, 11 Feb 2019 10:37:32 +0800 Subject: [PATCH 02/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bad31c6..c98a6de 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # 基于VPCS的桌面运维ETL 系统,满足对deta cache的可视化运维管理 基于VPCS思想的 进行2.0项目版本实践。 +##### 已经完成任务:采用ETL最新资源包。已测试调通可运行。罗瑶光。20190211 ##### 任务:vpcs 独有成份进行布局正在做。 -##### 任务:调通 etl 软件在这个工程中。 ##### 任务:第一个节点《缓存服务器链接节点》设计,从容易开始 ##### 任务:第一个节点《缓存服务器链接节点》无版权图案片做logo 直接在互联网上搜无版权的修改下,新巧就可以了 ##### 任务:第一个节点 通过 ip + 端口 + 安全认证 + 简单的字符串口号 链接一台或者缓存服务器,形成一个list box 树。 From 7483aa8a39febf872a4fb09b7b3c6174716c2030 Mon Sep 17 00:00:00 2001 From: Lenovo Date: Tue, 12 Feb 2019 13:01:13 +0800 Subject: [PATCH 03/14] FIX --- .classpath | 2 +- .settings/org.eclipse.buildship.core.prefs | 11 +++++++++++ UI/GUIBuild/GUIsample3.java | 1 - 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/.classpath b/.classpath index 2d6a00b..e57d9eb 100644 --- a/.classpath +++ b/.classpath @@ -1,7 +1,7 @@ - + diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs index 408b507..4973d34 100644 --- a/.settings/org.eclipse.buildship.core.prefs +++ b/.settings/org.eclipse.buildship.core.prefs @@ -1,2 +1,13 @@ +arguments= +auto.sync=false +build.scans.enabled=false +connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(4.10.3)) connection.project.dir= eclipse.preferences.version=1 +gradle.user.home= +java.home= +jvm.arguments= +offline.mode=false +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/UI/GUIBuild/GUIsample3.java b/UI/GUIBuild/GUIsample3.java index f30fce5..b4a8c6a 100644 --- a/UI/GUIBuild/GUIsample3.java +++ b/UI/GUIBuild/GUIsample3.java @@ -49,7 +49,6 @@ public class GUIsample3 extends JApplet implements MouseMotionListener, MouseListener,ItemListener,ActionListener,Runnable{ private static final long serialVersionUID = 5270675501794340912L; public GUIsample3() { - //getContentPane().setBackground(new Color(218,112,214)); getContentPane().setBackground(new Color(255,255,255)); } public int w,h; From 37a46f969e3060970e9847a4ff7f4d76f5c56271 Mon Sep 17 00:00:00 2001 From: Lenovo Date: Tue, 12 Feb 2019 13:25:59 +0800 Subject: [PATCH 04/14] working on first node --- UI/org/LYG/GUI/extOSGI/OSGI_rigester.java | 10 ++-- UI/org/LYG/GUI/nodeProject/china.gif | Bin 0 -> 798 bytes UI/org/LYG/GUI/nodeProject/nodeProject.java | 2 +- plugin/org/cache/devops/getCacheInfo/1.jpg | Bin 0 -> 1330 bytes .../getCacheInfo/CacheInfoNodeInterface.java | 35 ++++++++++++ .../getCacheInfo/CacheInfoNodePanel.java | 53 ++++++++++++++++++ .../devops/getCacheInfo/CacheInfoNodeRun.java | 19 +++++++ .../getCacheInfo/CacheInfoNodeView.java | 38 +++++++++++++ .../org/cache/devops/getCacheInfo/config.xml | 0 src/org/vpcs/boot/Application.java | 2 +- 10 files changed, 152 insertions(+), 7 deletions(-) create mode 100644 UI/org/LYG/GUI/nodeProject/china.gif create mode 100644 plugin/org/cache/devops/getCacheInfo/1.jpg create mode 100644 plugin/org/cache/devops/getCacheInfo/CacheInfoNodeInterface.java create mode 100644 plugin/org/cache/devops/getCacheInfo/CacheInfoNodePanel.java create mode 100644 plugin/org/cache/devops/getCacheInfo/CacheInfoNodeRun.java create mode 100644 plugin/org/cache/devops/getCacheInfo/CacheInfoNodeView.java create mode 100644 plugin/org/cache/devops/getCacheInfo/config.xml diff --git a/UI/org/LYG/GUI/extOSGI/OSGI_rigester.java b/UI/org/LYG/GUI/extOSGI/OSGI_rigester.java index c2fa1b5..cacabcf 100644 --- a/UI/org/LYG/GUI/extOSGI/OSGI_rigester.java +++ b/UI/org/LYG/GUI/extOSGI/OSGI_rigester.java @@ -1,20 +1,20 @@ package org.LYG.GUI.extOSGI; import java.io.IOException; - import org.LYG.GUI.OSGI.*; import org.LYG.node.ai.arffTransfer.arffTransferNodeInterface; - +import org.cache.devops.getCacheInfo.CacheInfoNodeInterface; public class OSGI_rigester{ public OSGI_rigester(){ } public nodeOSGI Rigester(nodeOSGI first, linkOSGI link) throws IOException{ //ע - // objectInterface arffTransferNode = new arffTransferNodeInterface(); - first = link.addNode(first,arffTransferNode); + first = link.addNode(first, arffTransferNode); + + objectInterface cacheInfoNode = new CacheInfoNodeInterface(); + first = link.addNode(first, cacheInfoNode); return first; } - } \ No newline at end of file diff --git a/UI/org/LYG/GUI/nodeProject/china.gif b/UI/org/LYG/GUI/nodeProject/china.gif new file mode 100644 index 0000000000000000000000000000000000000000..b87edb599001b90e27602c27519b8556b326cd44 GIT binary patch literal 798 zcmV+(1L6EfNk%v~VQK-{0D}Mk000000IC3%004h~zW@M#0Dpgf0DpgfzrVi#0RI60 z00960|8oHU0RR900RR90EC2ui0BQl*00RX6kjP1^y*TU5yZ>M)j$~<`XsWJk>%MR- z&vb3yc&_h!@BhG{a7Zi~kI1BQ$!t2G(5Q4uty-_xtai)odcWYXcuX#v&*-$y;mEMn z@Hm&;HgCbZ>)ofrp4fg@uWYjysEfkCT)!k%pC-nkbi>o}VC>lAxre z1fqgtFMo(ov^f%i?z63m@9+1zFWI0y}!g&qbbM5%1y~9%@e`P(ml^6(G}Oz z+BelD*%IB`;x4H;;p6DY!{%@4?l9%t?eFx$xAN!p`WmkAviypjal;wMnC z#Av=SdkQMrQdG&|Wc&6N&$Yc`)}@t_C=0)P?QYyyc4^>MBHJ2PNANJ>#o!v-OY9gF z3*K3jNpY(TC*!EFvck3j5OA07|%v cs_CYjcIxS;poS{ysHB!^>Zz!v`e+0IJHKzSz5oCK literal 0 HcmV?d00001 diff --git a/UI/org/LYG/GUI/nodeProject/nodeProject.java b/UI/org/LYG/GUI/nodeProject/nodeProject.java index 119a1b5..0de8742 100644 --- a/UI/org/LYG/GUI/nodeProject/nodeProject.java +++ b/UI/org/LYG/GUI/nodeProject/nodeProject.java @@ -12,7 +12,7 @@ public class nodeProject extends JScrollPane { public MyPanel jPanel; public Image img; public nodeProject() { - images =new ImageIcon(this.getClass().getResource("LUO.jpg")); + images =new ImageIcon(this.getClass().getResource("china.gif")); img = images.getImage(); jPanel=new MyPanel(); jPanel.repaint(); diff --git a/plugin/org/cache/devops/getCacheInfo/1.jpg b/plugin/org/cache/devops/getCacheInfo/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf38529919c6023fc0e6b211fada8a039b939c49 GIT binary patch literal 1330 zcmex=``2_j6xdp@o1cgOJMMZh|#U;coyG6VInuyV4pa*FVB^NNrR z{vTivwh= zDOELf4NWZ*Q!{f5ODks=S2uSLPp{yR(6I1`$f)F$)U@=B%&g*)(z5c3%Btp;*0%PJ z&aO$5r%atTea6gLixw|gx@`H1m8&*w-m-Pu_8mKS9XfpE=&|D`PM*4S`O4L6*Kgds z_3+W-Cr_U}fAR9w$4{TXeEs(Q$Io9Ne=#yJL%ap|8JfQYf&OA*VPR%r2lxYE z#}NLy#lXYN2#h>tK?Zwus}U^@PO?^E_l3EzYy;^Z7A- z>8m)+D>`4ZZ~v%q{5EN_nR<1#_3EM?7r{;WhKFR1J#{?O=#YN$j-9jJxtC8x9!pw# z`JMa{m-D3{!ZKOy(oMPMr8NZ~`6fP^|CYDTV_gaN#BJHu8qT$i_H7Z-Or8xk7J1Rn zQbKQU+}Cn>y~3581-rJ+vz}eKSjbf;M^={O)CPq)P5c1`*^gf+wR>Mo*xbtWQ_a(V zDo1DN+?!p;1?+b_9BJvd(cnI3`StzHs@rjP+`IPg?TP$R9ym2`i#4apnTfYIJ=tH| z@uV$;{VBUe%v*WWLy`ZK4cCVAN8j7FD$afL?5A5kOj#Ia6~FLZmtEkO#UGaRJQbgF z>GS*el{bER-)LcQKl|%?+aK=_Hur?hclAwPekZGn^-8bqz3Iu^-ll8b6s0zqu+Eg2 zvx}i1x<)GlP+a`GUS%JGx5M@BZdTzuv<$egoiF7x^@Emfg+p3fw==!(=Mlee?0^e-`uHM$8Ebe?+R}Bx51zMwwdbtS z|8TB%jgn)1a Date: Tue, 12 Feb 2019 13:49:37 +0800 Subject: [PATCH 05/14] working --- UI/org/LYG/GUI/extOSGI/OSGI_rigester.java | 4 +-- src/org/vpcs/boot/App.java | 43 ----------------------- 2 files changed, 2 insertions(+), 45 deletions(-) delete mode 100644 src/org/vpcs/boot/App.java diff --git a/UI/org/LYG/GUI/extOSGI/OSGI_rigester.java b/UI/org/LYG/GUI/extOSGI/OSGI_rigester.java index cacabcf..43677bb 100644 --- a/UI/org/LYG/GUI/extOSGI/OSGI_rigester.java +++ b/UI/org/LYG/GUI/extOSGI/OSGI_rigester.java @@ -9,8 +9,8 @@ public OSGI_rigester(){ public nodeOSGI Rigester(nodeOSGI first, linkOSGI link) throws IOException{ //ע // - objectInterface arffTransferNode = new arffTransferNodeInterface(); - first = link.addNode(first, arffTransferNode); +// objectInterface arffTransferNode = new arffTransferNodeInterface(); +// first = link.addNode(first, arffTransferNode); objectInterface cacheInfoNode = new CacheInfoNodeInterface(); first = link.addNode(first, cacheInfoNode); diff --git a/src/org/vpcs/boot/App.java b/src/org/vpcs/boot/App.java deleted file mode 100644 index 9a9fd93..0000000 --- a/src/org/vpcs/boot/App.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.vpcs.boot; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import javax.swing.JApplet; -public class App extends JApplet implements MouseListener, KeyListener{ - private static final long serialVersionUID = 1L; - public void init(){ - } - - @Override - public void keyPressed(KeyEvent arg0) { - } - @Override - public void keyReleased(KeyEvent arg0) { - - } - @Override - public void keyTyped(KeyEvent arg0) { - - } - @Override - public void mouseClicked(MouseEvent e) { - - } - @Override - public void mouseEntered(MouseEvent e) { - - } - @Override - public void mouseExited(MouseEvent e) { - - } - @Override - public void mousePressed(MouseEvent e) { - - } - @Override - public void mouseReleased(MouseEvent e) { - - } -} From d1346df848eb7ba44c12a22e005ce04b86e21c8b Mon Sep 17 00:00:00 2001 From: Lenovo Date: Tue, 12 Feb 2019 14:30:39 +0800 Subject: [PATCH 06/14] =?UTF-8?q?=E8=BF=90=E7=BB=B4=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UI/org/LYG/GUI/extOSGI/OSGI_rigester.java | 1 - UI/org/LYG/GUI/nodeProject/logo.jpg | Bin 0 -> 16832 bytes UI/org/LYG/GUI/nodeProject/nodeProject.java | 2 +- .../getCacheInfo/CacheInfoNodeInterface.java | 8 ++++---- .../devops/getCacheInfo/CacheInfoNodeView.java | 2 +- 5 files changed, 6 insertions(+), 7 deletions(-) create mode 100644 UI/org/LYG/GUI/nodeProject/logo.jpg diff --git a/UI/org/LYG/GUI/extOSGI/OSGI_rigester.java b/UI/org/LYG/GUI/extOSGI/OSGI_rigester.java index 43677bb..8b2d43e 100644 --- a/UI/org/LYG/GUI/extOSGI/OSGI_rigester.java +++ b/UI/org/LYG/GUI/extOSGI/OSGI_rigester.java @@ -1,7 +1,6 @@ package org.LYG.GUI.extOSGI; import java.io.IOException; import org.LYG.GUI.OSGI.*; -import org.LYG.node.ai.arffTransfer.arffTransferNodeInterface; import org.cache.devops.getCacheInfo.CacheInfoNodeInterface; public class OSGI_rigester{ public OSGI_rigester(){ diff --git a/UI/org/LYG/GUI/nodeProject/logo.jpg b/UI/org/LYG/GUI/nodeProject/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34342bd6977a848dcfb662a333dd4eb185b5bfe7 GIT binary patch literal 16832 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 Date: Tue, 12 Feb 2019 14:33:04 +0800 Subject: [PATCH 07/14] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c98a6de..41d8e08 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # 基于VPCS的桌面运维ETL 系统,满足对deta cache的可视化运维管理 基于VPCS思想的 进行2.0项目版本实践。 ##### 已经完成任务:采用ETL最新资源包。已测试调通可运行。罗瑶光。20190211 +##### 已经完成任务:已修改运维logo,已创造第一个运维节点 名称为获取缓存服务器信息。罗瑶光。20190212 + ##### 任务:vpcs 独有成份进行布局正在做。 ##### 任务:第一个节点《缓存服务器链接节点》设计,从容易开始 ##### 任务:第一个节点《缓存服务器链接节点》无版权图案片做logo 直接在互联网上搜无版权的修改下,新巧就可以了 From a1998d75682176e8db2d7e452d26b6b596245182 Mon Sep 17 00:00:00 2001 From: yaoguangluo Date: Tue, 12 Feb 2019 19:21:49 +0800 Subject: [PATCH 08/14] test connection yaoguangluo --- UI/GUIBuild/GUIsample3.java | 18 ++++----- .../getCacheInfo/CacheInfoNodePanel.java | 38 ++++++++---------- .../getCacheInfo/CacheInfoNodeView.java | 2 +- testconnection.png | Bin 0 -> 26238 bytes 4 files changed, 26 insertions(+), 32 deletions(-) create mode 100644 testconnection.png diff --git a/UI/GUIBuild/GUIsample3.java b/UI/GUIBuild/GUIsample3.java index 6456353..0918ef7 100644 --- a/UI/GUIBuild/GUIsample3.java +++ b/UI/GUIBuild/GUIsample3.java @@ -221,7 +221,7 @@ public void actionPerformed(ActionEvent e) { e1.printStackTrace(); } node.thisface.thispanel.setLocation(node.x, node.y); - node.thisface.thispanel.setSize(300, 300);//setBounds(0, 0, node.x+300,node.y+200); + node.thisface.thispanel.setSize(600, 480);//setBounds(0, 0, node.x+300,node.y+200); node.thisface.thispanel.setResizable(true); node.thisface.thispanel.setClosable(true); node.thisface.thispanel.jsp.setBounds(0, 0, node.thisface.thispanel.getWidth() - 10 @@ -241,7 +241,7 @@ public void actionPerformed(ActionEvent e) { e1.printStackTrace(); } node.thisface.thispanel.setLocation(node.x, node.y); - node.thisface.thispanel.setSize(300, 300);//setBounds(0, 0, node.x+300,node.y+200); + node.thisface.thispanel.setSize(600, 480);//setBounds(0, 0, node.x+300,node.y+200); node.thisface.thispanel.setResizable(true); node.thisface.thispanel.setClosable(true);node.thisface.thispanel.jsp.setBounds(0, 0 , node.thisface.thispanel.getWidth()-10, node.thisface.thispanel.getHeight()-45); @@ -495,23 +495,23 @@ public void mouseDragged(MouseEvent e) { currentx=e.getX(); currenty=e.getY(); LinkNode node=new LinkNode(); - first=new Sort().sort(first); - node=first; + first = new Sort().sort(first); + node = first; Graphics g = getGraphics(); Graphics2D g2 = (Graphics2D)g; g2.setColor(Color.black); - if(node!=null){ - if(node.leftchoose&&!node.rightchoose){ + if(node != null){ + if(node.leftchoose && !node.rightchoose){ node.setxy(e.getX(),e.getY()); new DynamicLineUpdater().exec(first,node); this.update(); } - if(!node.leftchoose&&node.rightchoose){ + if(!node.leftchoose && node.rightchoose){ new DrawArrow(g2,oldx, oldy, e.getX(), e.getY()); this.update(g); } - while(node.next!=null){ - node=node.next; + while(node.next != null){ + node = node.next; if(node.leftchoose&&!node.rightchoose){ node.setxy(e.getX(),e.getY()); new DynamicLineUpdater().exec(first,node); diff --git a/plugin/org/cache/devops/getCacheInfo/CacheInfoNodePanel.java b/plugin/org/cache/devops/getCacheInfo/CacheInfoNodePanel.java index e180f60..0bb19dc 100644 --- a/plugin/org/cache/devops/getCacheInfo/CacheInfoNodePanel.java +++ b/plugin/org/cache/devops/getCacheInfo/CacheInfoNodePanel.java @@ -2,6 +2,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JTextField; import org.LYG.GUI.OSGI.*; @@ -20,33 +22,25 @@ public CacheInfoNodePanel(final CacheInfoNodeRun thisrun){ jp=new Panel(); jp.setLayout(null); jp.setBackground(Color.white); - JButton button = new JButton("Finish"); - button.setBounds(0, 0, 100, 30); - button.addActionListener(new ActionListener(){ - public void actionPerformed(ActionEvent e){ - System.out.println(e.getSource()); - close=true; - thisrun.value=1; - } - }); + + //add new connection + JLabel label= new JLabel("ӣ"); + label.setBounds(2, 2, 80, 30); + + JTextField ipport= new JTextField("xxx.xxx.xxx.xxx:xxxxx", 18); + ipport.setBounds(2+85, 2, 200, 30); - jp.add(button); - JButton readfile= new JButton("Write File"); - readfile.setBounds(0, 35, 100, 65); - readfile.addActionListener(new ActionListener(){ - public void actionPerformed(ActionEvent arg0) { - filedialog=new FileDialog(new Frame(),"filechoose",FileDialog.LOAD); - filedialog.setVisible(true); - thisrun.filepath=filedialog.getDirectory()+filedialog.getFile(); - System.out.println(thisrun.filepath); - } - }); + JButton jbutton=new JButton("ȷ"); + jbutton.setBounds(2, 2+35, 80, 30); - jp.add(readfile); + jp.add(label); + jp.add(ipport); + jp.add(jbutton); + jsp.add(jp); close=false; this.setClosable(true); - } + } public void config(){ System.out.println("configued"); } diff --git a/plugin/org/cache/devops/getCacheInfo/CacheInfoNodeView.java b/plugin/org/cache/devops/getCacheInfo/CacheInfoNodeView.java index 812d6ad..656b3c8 100644 --- a/plugin/org/cache/devops/getCacheInfo/CacheInfoNodeView.java +++ b/plugin/org/cache/devops/getCacheInfo/CacheInfoNodeView.java @@ -15,7 +15,7 @@ public CacheInfoNodeView(){ } public void view(){ jsp = new ScrollPane(); - jp=new Panel(); + jp = new Panel(); jp.setBackground(Color.yellow); // JScrollPane j = new JScrollPane(); diff --git a/testconnection.png b/testconnection.png new file mode 100644 index 0000000000000000000000000000000000000000..77355265157f47c17eec41cf20c8897a1e633f17 GIT binary patch literal 26238 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�-fHv{37!RVyGxk8+G@ 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 MbyHA Date: Tue, 12 Feb 2019 19:25:29 +0800 Subject: [PATCH 09/14] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 41d8e08..3260e32 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ ##### 任务: ##### 任务: ##### 任务: +![实例](https://github.com/yaoguangluo/Deta_Cache_Devops_App/blob/master/testconnection.png) From ad24f9cad53819095f2ead9130defabc787c2a82 Mon Sep 17 00:00:00 2001 From: sofia Date: Thu, 14 Feb 2019 21:49:08 +1000 Subject: [PATCH 10/14] =?UTF-8?q?=E6=96=B0=E5=A2=9Esocket=20handler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit version 1 --- .../devops/utils/SocketRequestHandler.java | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 plugin/org/cache/devops/utils/SocketRequestHandler.java diff --git a/plugin/org/cache/devops/utils/SocketRequestHandler.java b/plugin/org/cache/devops/utils/SocketRequestHandler.java new file mode 100644 index 0000000..6645979 --- /dev/null +++ b/plugin/org/cache/devops/utils/SocketRequestHandler.java @@ -0,0 +1,82 @@ +package org.cache.devops.utils; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.SocketAddress; +import java.net.URLEncoder; + + +public class SocketRequestHandler { + + private int port=6379; + private String host="127.0.0.1"; + private Socket socket; + private BufferedReader bufferedReader; + private BufferedWriter bufferedWriter; + + + public void sendGet(String path) throws IOException + { +// String path = "/devopsCache"; + SocketAddress dest = new InetSocketAddress(this.host, this.port); + socket.connect(dest); + OutputStreamWriter streamWriter = new OutputStreamWriter(socket.getOutputStream()); + bufferedWriter = new BufferedWriter(streamWriter); + + bufferedWriter.write("GET " + path + " HTTP/1.1\r\n"); + bufferedWriter.write("Host: " + this.host + "\r\n"); + bufferedWriter.write("\r\n"); + bufferedWriter.flush(); + + BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream()); + bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8")); + String line = null; + while((line = bufferedReader.readLine())!= null) + { + System.out.println(line); + } + bufferedReader.close(); + bufferedWriter.close(); + socket.close(); + } + + public void sendPost(String path,String ip, String port,String email, String password) throws IOException + { +// String path = "/put"; + String data = URLEncoder.encode(email, "utf-8") + "=" + URLEncoder.encode(password, "utf-8") + "&" + + URLEncoder.encode(ip, "utf-8") + "=" + URLEncoder.encode(port, "utf-8"); + // String data = "name=zhigang_jia"; + SocketAddress dest = new InetSocketAddress(this.host, this.port); + socket.connect(dest); + OutputStreamWriter streamWriter = new OutputStreamWriter(socket.getOutputStream(), "utf-8"); + bufferedWriter = new BufferedWriter(streamWriter); + + bufferedWriter.write("POST " + path + " HTTP/1.1\r\n"); + bufferedWriter.write("Host: " + this.host + "\r\n"); + bufferedWriter.write("Content-Length: " + data.length() + "\r\n"); + bufferedWriter.write("Content-Type: application/x-www-form-urlencoded\r\n"); + bufferedWriter.write("\r\n"); + bufferedWriter.write(data); + bufferedWriter.flush(); + bufferedWriter.write("\r\n"); + bufferedWriter.flush(); + + BufferedInputStream streamReader = new BufferedInputStream(socket.getInputStream()); + bufferedReader = new BufferedReader(new InputStreamReader(streamReader, "utf-8")); + String line = null; + while((line = bufferedReader.readLine())!= null) + { + System.out.println(line); + } + bufferedReader.close(); + bufferedWriter.close(); + socket.close(); + } + +} From 649f3d09dce6a4d3a3cbfa899ef22e28a10ef846 Mon Sep 17 00:00:00 2001 From: sofia Date: Thu, 14 Feb 2019 22:15:57 +1000 Subject: [PATCH 11/14] version1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在configue 确定按钮提交socket请求缓存服务器 --- .../getCacheInfo/CacheInfoNodePanel.java | 141 ++++++++++++------ 1 file changed, 94 insertions(+), 47 deletions(-) mode change 100644 => 100755 plugin/org/cache/devops/getCacheInfo/CacheInfoNodePanel.java diff --git a/plugin/org/cache/devops/getCacheInfo/CacheInfoNodePanel.java b/plugin/org/cache/devops/getCacheInfo/CacheInfoNodePanel.java old mode 100644 new mode 100755 index 0bb19dc..6752643 --- a/plugin/org/cache/devops/getCacheInfo/CacheInfoNodePanel.java +++ b/plugin/org/cache/devops/getCacheInfo/CacheInfoNodePanel.java @@ -1,47 +1,94 @@ -package org.cache.devops.getCacheInfo; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import javax.swing.JButton; -import javax.swing.JLabel; -import javax.swing.JTextField; - -import org.LYG.GUI.OSGI.*; - -import java.awt.FileDialog; -import java.awt.Frame; -import java.awt.Panel; -import java.awt.ScrollPane; -import java.awt.Color; -public class CacheInfoNodePanel extends objectPanel{ - private static final long serialVersionUID = 1L; - private FileDialog filedialog; - public CacheInfoNodePanel(final CacheInfoNodeRun thisrun){ - setLayout(null); - jsp = new ScrollPane(); - add(jsp); - jp=new Panel(); - jp.setLayout(null); - jp.setBackground(Color.white); - - //add new connection - JLabel label= new JLabel("ӣ"); - label.setBounds(2, 2, 80, 30); - - JTextField ipport= new JTextField("xxx.xxx.xxx.xxx:xxxxx", 18); - ipport.setBounds(2+85, 2, 200, 30); - - JButton jbutton=new JButton("ȷ"); - jbutton.setBounds(2, 2+35, 80, 30); - - jp.add(label); - jp.add(ipport); - jp.add(jbutton); - - jsp.add(jp); - close=false; - this.setClosable(true); - } - public void config(){ - System.out.println("configued"); - } -} +package org.cache.devops.getCacheInfo; + +import org.LYG.GUI.OSGI.objectPanel; +import org.cache.devops.utils.SocketRequestHandler; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.net.Socket; + +public class CacheInfoNodePanel extends objectPanel { + private static final long serialVersionUID = 1L; + + public CacheInfoNodePanel(final CacheInfoNodeRun thisrun) { + setLayout(null); + jsp = new ScrollPane(); + add(jsp); + jp = new Panel(); + jp.setLayout(null); + jp.setBackground(Color.white); + + //add new connection + JLabel label = new JLabel("?????????"); + label.setBounds(2, 2, 80, 30); + JTextField ipport = new JTextField("xxx.xxx.xxx.xxx:xxxxx", 18); + ipport.setBounds(2 + 85, 2, 200, 30); + + JLabel labelName = new JLabel("????????"); + labelName.setBounds(2, 2 + 35, 80, 30); + JTextField jTextFieldName = new JTextField("???????????", 18); + jTextFieldName.setBounds(2 + 85, 2 + 35, 200, 30); + + JLabel labelPswd = new JLabel("???????"); + labelPswd.setBounds(2, 2 + 35 + 35, 80, 30); + JTextField jTextFieldPswd = new JTextField("???????????", 18); + jTextFieldPswd.setBounds(2 + 85, 2 + 35 + 35, 200, 30); + // + JButton jbutton = new JButton("???"); + jbutton.setBounds(2, 2 + 35 + 35 + 35, 80, 30); + jbutton.addActionListener(new ActionListener() { + + //socketDeta_Cache + public void actionPerformed(ActionEvent arg0) { + try { + String textOfLabelName = labelName.getText(); + String textOflabelPswd = labelPswd.getText(); + String textOfIpport = ipport.getText(); + Socket socket = new Socket(textOfIpport.split(":")[0], Integer.valueOf(textOfIpport.split(":")[1])); + PrintWriter os = new PrintWriter(socket.getOutputStream()); + os.flush(); + InputStream is = socket.getInputStream(); + byte[] bytes = new byte[1024]; + while ((is.read(bytes, 0, 1024)) != -1) { + //System.out.println("1"+new String(bytes)); + } + + try { + new SocketRequestHandler().sendGet("/get"); + + System.out.println("configued"); + } catch (IOException e) { + e.printStackTrace(); + } + + } catch (Exception e) { + + } + } + }); + jp.add(labelName); + jp.add(jTextFieldName); + jp.add(labelPswd); + jp.add(jTextFieldPswd); + + + jp.add(label); + jp.add(ipport); + jp.add(jbutton); + + jsp.add(jp); + close = false; + this.setClosable(true); + } + + public void config() { + + System.out.println("configued"); + + } +} From 8bac2f75eef9750dccff5aaa91c5ce01bd62516a Mon Sep 17 00:00:00 2001 From: sofia Date: Fri, 15 Feb 2019 19:33:32 +1000 Subject: [PATCH 12/14] version 1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增RSA非对称加密算法实现 --- .../org/cache/devops/utils/RsaSecurity.java | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 plugin/org/cache/devops/utils/RsaSecurity.java diff --git a/plugin/org/cache/devops/utils/RsaSecurity.java b/plugin/org/cache/devops/utils/RsaSecurity.java new file mode 100644 index 0000000..de8b2bc --- /dev/null +++ b/plugin/org/cache/devops/utils/RsaSecurity.java @@ -0,0 +1,92 @@ +package org.cache.devops.utils; + +import sun.misc.BASE64Decoder; +import sun.misc.BASE64Encoder; + +import javax.crypto.Cipher; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.security.Key; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.SecureRandom; + +public class RsaSecurity { + + private static int KEYSIZE=1024; + + public static void main(String[] args) throws Exception { + + generateKeyPair(); + String source = "sofiabert";//要加密的字符串 + + String cryptograph = encrypt(source);//生成的密文 + System.out.println("encrypt code--->"+cryptograph); + + String target = decrypt(cryptograph);//解密密文 + System.out.println("decrypt code--->"+target); + + + } + + private static void generateKeyPair() throws Exception{ + /** RSA算法要求有一个可信任的随机数源 */ + SecureRandom sr = new SecureRandom(); + /** 为RSA算法创建一个KeyPairGenerator对象 */ + KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); + /** 利用上面的随机数据源初始化这个KeyPairGenerator对象 */ + kpg.initialize(KEYSIZE, sr); + /** 生成密匙对 */ + KeyPair kp = kpg.generateKeyPair(); + /** 得到公钥 */ + Key publicKey = kp.getPublic(); + /** 得到私钥 */ + Key privateKey = kp.getPrivate(); + /** 用对象流将生成的密钥写入文件 */ + ObjectOutputStream oos1 = new ObjectOutputStream(new FileOutputStream("publickey.keystore")); + ObjectOutputStream oos2 = new ObjectOutputStream(new FileOutputStream("privatekey.keystore")); + oos1.writeObject(publicKey); + oos2.writeObject(privateKey); + /** 清空缓存,关闭文件输出流 */ + oos1.close(); + oos2.close(); + } + + public static String encrypt(String source) throws Exception{ + + /** 将文件中的公钥对象读出 */ + ObjectInputStream ois = new ObjectInputStream(new FileInputStream("publickey.keystore")); + Key key = (Key) ois.readObject(); + ois.close(); + /** 得到Cipher对象来实现对源数据的RSA加密 */ + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, key); + byte[] b = source.getBytes(); + /** 执行加密操作 */ + byte[] b1 = cipher.doFinal(b); + BASE64Encoder encoder = new BASE64Encoder(); + return encoder.encode(b1); + } + + public static String decrypt(String cryptograph) throws Exception{ + /** 将文件中的私钥对象读出 */ + ObjectInputStream ois = new ObjectInputStream(new FileInputStream("privatekey.keystore")); + Key key = (Key) ois.readObject(); + /** 得到Cipher对象对已用公钥加密的数据进行RSA解密 */ + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, key); + BASE64Decoder decoder = new BASE64Decoder(); + byte[] b1 = decoder.decodeBuffer(cryptograph); + /** 执行解密操作 */ + byte[] b = cipher.doFinal(b1); + return new String(b); + } + + + + + + +} From 51070e611c2c2d9c148feacb002e5db28d044198 Mon Sep 17 00:00:00 2001 From: sofia Date: Sat, 16 Feb 2019 21:32:17 +1000 Subject: [PATCH 13/14] socket request & security --- .../cache/devops/utils/RpcFrameHandler.java | 167 ++++++++++++++++++ .../cache/devops/utils/SniperSecurity.java | 92 ++++++++++ 2 files changed, 259 insertions(+) create mode 100644 plugin/org/cache/devops/utils/RpcFrameHandler.java create mode 100644 plugin/org/cache/devops/utils/SniperSecurity.java diff --git a/plugin/org/cache/devops/utils/RpcFrameHandler.java b/plugin/org/cache/devops/utils/RpcFrameHandler.java new file mode 100644 index 0000000..e614be4 --- /dev/null +++ b/plugin/org/cache/devops/utils/RpcFrameHandler.java @@ -0,0 +1,167 @@ +package org.cache.devops.utils; + +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.net.ServerSocket; +import java.net.Socket; + +/** + * RpcFramework + * + * @author william.liangf + */ +public class RpcFrameHandler { + + /** + * 暴露服务 + * + * @param service 服务实现 + * @param port 服务端口 + * @throws Exception + */ + public static void export(final Object service, int port) throws Exception { + if (service == null) { + throw new IllegalArgumentException("service instance == null"); + } + if (port <= 0 || port > 65535) { + throw new IllegalArgumentException("Invalid port " + port); + } + System.out.println("Export service " + service.getClass().getName() + " on port " + port); + ServerSocket server = new ServerSocket(port); + for(;;) { + try { + final Socket socket = server.accept(); + new Thread(new Runnable() { + @Override + public void run() { + try { + try { + ObjectInputStream input = new ObjectInputStream(socket.getInputStream()); + try { + String methodName = input.readUTF(); + Class[] parameterTypes = (Class[])input.readObject(); + Object[] arguments = (Object[])input.readObject(); + ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream()); + try { + Method method = service.getClass().getMethod(methodName, parameterTypes); + Object result = method.invoke(service, arguments); + output.writeObject(result); + } catch (Throwable t) { + output.writeObject(t); + } finally { + output.close(); + } + } finally { + input.close(); + } + } finally { + socket.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** + * 引用服务 + * + * @param 接口泛型 + * @param interfaceClass 接口类型 + * @param host 服务器主机名 + * @param port 服务器端口 + * @return 远程服务 + * @throws Exception + */ + @SuppressWarnings("unchecked") + public static T refer(final Class interfaceClass, final String host, final int port) throws Exception { + if (interfaceClass == null) { + throw new IllegalArgumentException("Interface class == null"); + } + if (! interfaceClass.isInterface()) { + throw new IllegalArgumentException("The " + interfaceClass.getName() + " must be interface class!"); + } + if (host == null || host.length() == 0) { + throw new IllegalArgumentException("Host == null!"); + } + if (port <= 0 || port > 65535) { + throw new IllegalArgumentException("Invalid port " + port); + } + System.out.println("Get remote service " + interfaceClass.getName() + " from server " + host + ":" + port); + return (T) Proxy.newProxyInstance(interfaceClass.getClassLoader(), new Class[] {interfaceClass}, new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] arguments) throws Throwable { + Socket socket = new Socket(host, port); + try { + ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream()); + try { + output.writeUTF(method.getName()); + output.writeObject(method.getParameterTypes()); + output.writeObject(arguments); + ObjectInputStream input = new ObjectInputStream(socket.getInputStream()); + try { + Object result = input.readObject(); + if (result instanceof Throwable) { + throw (Throwable) result; + } + return result; + } finally { + input.close(); + } + } finally { + output.close(); + } + } finally { + socket.close(); + } + } + }); + } +} + +interface HelloService { + + String hello(String name); + +} + +class HelloServiceImpl implements HelloService { + + @Override + public String hello(String name) { + return "Hello " + name; + } + +} + + class RpcProvider { + + public static void main(String[] args) throws Exception { + HelloService service = new HelloServiceImpl(); + RpcFrameHandler.export(service, 6378); + } + +} + + class RpcConsumer { + + public static void main(String[] args) throws Exception { + HelloService service = RpcFrameHandler.refer(HelloService.class, "127.0.0.1", 6378); + for (int i = 0; i < Integer.MAX_VALUE; i ++) { + String hello = service.hello("World " + i); + System.out.println(hello); + Thread.sleep(1000); + } + } + +} + + diff --git a/plugin/org/cache/devops/utils/SniperSecurity.java b/plugin/org/cache/devops/utils/SniperSecurity.java new file mode 100644 index 0000000..a4e1c95 --- /dev/null +++ b/plugin/org/cache/devops/utils/SniperSecurity.java @@ -0,0 +1,92 @@ +package org.cache.devops.utils; + +import sun.misc.BASE64Decoder; +import sun.misc.BASE64Encoder; + +import javax.crypto.Cipher; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.security.Key; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.SecureRandom; + +public class SniperSecurity { + + private static int KEYSIZE=1024; + + public static void main(String[] args) throws Exception { + + generateKeyPair(); + String source = "sofiabert";//要加密的字符串 + + String cryptograph = encrypt(source);//生成的密文 + System.out.println("encrypt code--->"+cryptograph); + + String target = decrypt(cryptograph);//解密密文 + System.out.println("decrypt code--->"+target); + + + } + + private static void generateKeyPair() throws Exception{ + /** RSA算法要求有一个可信任的随机数源 */ + SecureRandom sr = new SecureRandom(); + /** 为RSA算法创建一个KeyPairGenerator对象 */ + KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); + /** 利用上面的随机数据源初始化这个KeyPairGenerator对象 */ + kpg.initialize(KEYSIZE, sr); + /** 生成密匙对 */ + KeyPair kp = kpg.generateKeyPair(); + /** 得到公钥 */ + Key publicKey = kp.getPublic(); + /** 得到私钥 */ + Key privateKey = kp.getPrivate(); + /** 用对象流将生成的密钥写入文件 */ + ObjectOutputStream oos1 = new ObjectOutputStream(new FileOutputStream("publickey.keystore")); + ObjectOutputStream oos2 = new ObjectOutputStream(new FileOutputStream("privatekey.keystore")); + oos1.writeObject(publicKey); + oos2.writeObject(privateKey); + /** 清空缓存,关闭文件输出流 */ + oos1.close(); + oos2.close(); + } + + public static String encrypt(String source) throws Exception{ + + /** 将文件中的公钥对象读出 */ + ObjectInputStream ois = new ObjectInputStream(new FileInputStream("publickey.keystore")); + Key key = (Key) ois.readObject(); + ois.close(); + /** 得到Cipher对象来实现对源数据的RSA加密 */ + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, key); + byte[] b = source.getBytes(); + /** 执行加密操作 */ + byte[] b1 = cipher.doFinal(b); + BASE64Encoder encoder = new BASE64Encoder(); + return encoder.encode(b1); + } + + public static String decrypt(String cryptograph) throws Exception{ + /** 将文件中的私钥对象读出 */ + ObjectInputStream ois = new ObjectInputStream(new FileInputStream("privatekey.keystore")); + Key key = (Key) ois.readObject(); + /** 得到Cipher对象对已用公钥加密的数据进行RSA解密 */ + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, key); + BASE64Decoder decoder = new BASE64Decoder(); + byte[] b1 = decoder.decodeBuffer(cryptograph); + /** 执行解密操作 */ + byte[] b = cipher.doFinal(b1); + return new String(b); + } + + + + + + +} From 60cdb321bf29ab0aa8c061cdb8818b875e736d0f Mon Sep 17 00:00:00 2001 From: SofiaBert <36010170+SofiaBert@users.noreply.github.com> Date: Tue, 19 Feb 2019 21:47:50 +1000 Subject: [PATCH 14/14] detele --- .../org/cache/devops/utils/RsaSecurity.java | 92 ------------------- 1 file changed, 92 deletions(-) delete mode 100644 plugin/org/cache/devops/utils/RsaSecurity.java diff --git a/plugin/org/cache/devops/utils/RsaSecurity.java b/plugin/org/cache/devops/utils/RsaSecurity.java deleted file mode 100644 index de8b2bc..0000000 --- a/plugin/org/cache/devops/utils/RsaSecurity.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.cache.devops.utils; - -import sun.misc.BASE64Decoder; -import sun.misc.BASE64Encoder; - -import javax.crypto.Cipher; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.security.Key; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.SecureRandom; - -public class RsaSecurity { - - private static int KEYSIZE=1024; - - public static void main(String[] args) throws Exception { - - generateKeyPair(); - String source = "sofiabert";//要加密的字符串 - - String cryptograph = encrypt(source);//生成的密文 - System.out.println("encrypt code--->"+cryptograph); - - String target = decrypt(cryptograph);//解密密文 - System.out.println("decrypt code--->"+target); - - - } - - private static void generateKeyPair() throws Exception{ - /** RSA算法要求有一个可信任的随机数源 */ - SecureRandom sr = new SecureRandom(); - /** 为RSA算法创建一个KeyPairGenerator对象 */ - KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); - /** 利用上面的随机数据源初始化这个KeyPairGenerator对象 */ - kpg.initialize(KEYSIZE, sr); - /** 生成密匙对 */ - KeyPair kp = kpg.generateKeyPair(); - /** 得到公钥 */ - Key publicKey = kp.getPublic(); - /** 得到私钥 */ - Key privateKey = kp.getPrivate(); - /** 用对象流将生成的密钥写入文件 */ - ObjectOutputStream oos1 = new ObjectOutputStream(new FileOutputStream("publickey.keystore")); - ObjectOutputStream oos2 = new ObjectOutputStream(new FileOutputStream("privatekey.keystore")); - oos1.writeObject(publicKey); - oos2.writeObject(privateKey); - /** 清空缓存,关闭文件输出流 */ - oos1.close(); - oos2.close(); - } - - public static String encrypt(String source) throws Exception{ - - /** 将文件中的公钥对象读出 */ - ObjectInputStream ois = new ObjectInputStream(new FileInputStream("publickey.keystore")); - Key key = (Key) ois.readObject(); - ois.close(); - /** 得到Cipher对象来实现对源数据的RSA加密 */ - Cipher cipher = Cipher.getInstance("RSA"); - cipher.init(Cipher.ENCRYPT_MODE, key); - byte[] b = source.getBytes(); - /** 执行加密操作 */ - byte[] b1 = cipher.doFinal(b); - BASE64Encoder encoder = new BASE64Encoder(); - return encoder.encode(b1); - } - - public static String decrypt(String cryptograph) throws Exception{ - /** 将文件中的私钥对象读出 */ - ObjectInputStream ois = new ObjectInputStream(new FileInputStream("privatekey.keystore")); - Key key = (Key) ois.readObject(); - /** 得到Cipher对象对已用公钥加密的数据进行RSA解密 */ - Cipher cipher = Cipher.getInstance("RSA"); - cipher.init(Cipher.DECRYPT_MODE, key); - BASE64Decoder decoder = new BASE64Decoder(); - byte[] b1 = decoder.decodeBuffer(cryptograph); - /** 执行解密操作 */ - byte[] b = cipher.doFinal(b1); - return new String(b); - } - - - - - - -}