Changeset 23382 in osm for applications/editors/josm


Ignore:
Timestamp:
2010-09-28T00:43:08+02:00 (14 years ago)
Author:
postfix
Message:

toms integrated in smed, basic works

Location:
applications/editors/josm/plugins
Files:
198 added
10 edited
1 copied
1 moved

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/smed/src/smed/Smed.java

    r23282 r23382  
    2222import org.openstreetmap.josm.plugins.PluginInformation;
    2323
     24import smed.io.SmedFile;
    2425import smed.plug.SmedPluginApp;
    2526import smed.plug.ifc.SmedPluggable;
     
    4748
    4849        File[] jars = splugDir.listFiles(new JARFileFilter());
     50        SmedFile.init();
    4951
    5052        // build smed_ifc.jar from smed.jar
     
    8082                        inp.close();
    8183                        pfos.close();
     84                       
     85                        SmedFile.createMF(eName);
    8286                    }
    8387                }
     
    130134            ex.printStackTrace();
    131135        }
    132 
     136       
    133137        SmedTab = new SmedTabAction();
    134138        item = Main.main.menu.toolsMenu.add(SmedTab);
  • applications/editors/josm/plugins/smed/src/smed/io/SmedFile.java

    r23328 r23382  
    1 package smed;
     1package smed.io;
    22
    33import java.io.File;
     4import java.io.FileOutputStream;
     5import java.io.IOException;
     6import java.io.ObjectOutputStream;
     7import java.util.jar.Attributes;
     8import java.util.jar.JarFile;
     9import java.util.jar.JarOutputStream;
     10import java.util.jar.Manifest;
     11import java.util.zip.ZipEntry;
     12
     13import smed.plug.ifc.SmedPluggable;
     14import smed.plug.util.JARFileFilter;
    415
    516public class SmedFile extends File{
     
    920     */
    1021    private static final long serialVersionUID = 1L;
     22    private static File plugDir = null;
     23    private static String pathname = null;
     24    private static File[] plugJars = null;
    1125
    1226    public SmedFile(String pathname) {
    1327        super(pathname);
     28        this.pathname = pathname;
     29        plugDir = new File(pathname);
     30        plugJars = plugDir.listFiles(new JARFileFilter());
    1431    }
    1532
     33    /**
     34     * show if plugin need update
     35     *
     36     * @param jars
     37     * @param name
     38     * @return boolean true/false
     39     */
    1640    public boolean needUpdate(File[] jars, String name) {
    17        
    1841        for(File j : jars) {
    1942            String jName = j.getName();
     
    3356        return true;
    3457    }
     58
     59   
     60   
     61    /**
     62     * show if plugin is visible
     63     *
     64     * @param name
     65     * @return boolean true/false
     66     */
     67        public boolean isVisible(String name) { return getAttributeState("visible", name); }
     68       
     69        /**
     70         * show if plugin is deleted
     71         *
     72         * @param name
     73         * @return boolean true/false
     74         */
     75        public boolean isDeleted(String name) { return getAttributeState("deleted", name); }
     76       
     77        public boolean getAttributeState(String attribute, String name) {               
     78                File f = getFile(plugJars, name, true);
     79               
     80                if(f == null) return false;
     81                else {
     82                        String str;
     83                        JarFile test;
     84                        try {
     85                                test = new JarFile(pathname + "/.ini/MF" + f.getName().substring(16));
     86                                Manifest mf = test.getManifest();
     87                                str = mf.getMainAttributes().getValue(attribute);
     88                               
     89                                if(str == null || !str.equals("yes")) return false;
     90
     91                        } catch (IOException e) {
     92                                e.printStackTrace();
     93                        }
     94                       
     95                        return true;
     96                }
     97
     98        }
     99
     100        /**
     101         * search file in files
     102         * 
     103         * @param
     104         * @return if found -> File, if not found -> null
     105         */
     106        private static File getFile(File[] files, String name, Boolean isSmed) {
     107                for(int i = 0; i < files.length; i++) {
     108                        String fileName = files[i].getName();
     109                       
     110                        if(isSmed) {
     111                                if(fileName.length() > 15) { // < 16 isn'nt a SmedFile
     112                                        if (fileName.substring(16).equals("_" + name)) return files[i];
     113                                }
     114                        } else if(fileName.equals(name)) return files[i];
     115                }
     116                return null;
     117        }
     118
     119        /**
     120         * set the state "visible" of the plugin (name)
     121         *
     122         * @param name
     123         * @param isVisible
     124         */
     125        public void setVisible(String name, boolean isVisible) { setAttr("visible", name, isVisible); }
     126       
     127        /**
     128         * set the state "deleted" of the plugin (name)
     129         *
     130         * @param name
     131         * @param isDeleted
     132         */
     133        public void setDeleted(String name, boolean isDeleted) { setAttr("deleted", name, isDeleted); }
     134
     135
     136        private void setAttr(String attribute, String name, boolean b) {               
     137                File f = getFile(plugJars,name,true);
     138                if(f == null) return;
     139                else {
     140                        try {
     141                                JarFile file = new JarFile(pathname + "/.ini/MF" + f.getName().substring(16));
     142                               
     143                                Manifest mf = file.getManifest();
     144                                Attributes attr = mf.getMainAttributes();
     145                                if(b) attr.putValue(attribute,"yes");
     146                                else attr.putValue(attribute,"no");
     147                               
     148                                FileOutputStream fos = new FileOutputStream(pathname + "/.ini/MF" + f.getName().substring(16));
     149                                JarOutputStream jos = new JarOutputStream(fos,mf);
     150                                jos.close();
     151                                fos.flush();
     152                                fos.close();
     153
     154                        } catch (IOException e) {
     155                                e.printStackTrace();
     156                        }
     157                }
     158        }
     159
     160        /**
     161         * copies the manifests from the plugin.jar to
     162         * .ini/mf_plugin.jar. Necessary, because you
     163         * can't modified the original jars under windows,
     164         * (because under windows, they are used)
     165         */
     166        private static void copyMFs(File[] plugInis) {
     167                for(int i = 0; i < plugJars.length; i++) {
     168                        String source = plugJars[i].getName();
     169                        String dest;
     170                       
     171                        if(source.length() > 15) { // < 16 isn'nt a SmedFile
     172                                dest = "MF" + source.substring(16);
     173
     174                                if(getFile(plugInis, dest, false) == null) {
     175                                        try {
     176                                                JarFile file = new JarFile(pathname + "/" + source);
     177                                                Manifest mf = file.getManifest();
     178                                                Attributes attr = mf.getMainAttributes();
     179                                                attr.putValue("visible","yes");
     180                                                attr.putValue("deleted","no");
     181
     182                                                FileOutputStream fos = new FileOutputStream(pathname + "/.ini/" + dest);
     183                                                JarOutputStream jos = new JarOutputStream(fos,mf);
     184                                               
     185                                                jos.close();
     186                                                fos.flush();
     187                                                fos.close();
     188                                        } catch (IOException e) {
     189                                                e.printStackTrace();
     190                                        }       
     191                                }
     192                       
     193                        }
     194                }
     195               
     196        }
     197
     198        public static void init() {
     199                File splugDirIni = new File(pathname + "/.ini");
     200               
     201                if(!splugDirIni.exists()) splugDirIni.mkdir();
     202                File[] plugInis = splugDirIni.listFiles(new JARFileFilter());
     203               
     204                copyMFs(plugInis);
     205               
     206                SmedFile smedDir = new SmedFile(pathname);
     207               
     208                for(int i = 0; i < plugJars.length; i++) {
     209                        File file = plugJars[i];
     210                       
     211                        if(file.getName().length() > 16) { // < 16 isn'nt a SmedFile
     212                                String name = file.getName().substring(17);
     213                               
     214                                if(smedDir.isDeleted(name)) {
     215                                        File fileMF = new File(pathname + "/.ini/MF_" + name);
     216                                       
     217                                        fileMF.delete();
     218                                        file.delete();
     219                                }
     220                        }
     221                }
     222        }
     223
     224        public static void createMF(String name) {
     225                String dest;
     226                if(name.length() > 17) { // < 17 isn'nt a SmedFile
     227                        dest = "MF_" + name.substring(17);
     228                        try {
     229                                JarFile file = new JarFile(pathname + "/" + name);
     230                                Manifest mf = file.getManifest();
     231                                Attributes attr = mf.getMainAttributes();
     232                                attr.putValue("visible","yes");
     233                                attr.putValue("deleted","no");
     234                               
     235                                FileOutputStream fos = new FileOutputStream(pathname + "/.ini/" + dest);
     236                                JarOutputStream jos = new JarOutputStream(fos,mf);
     237                               
     238                                jos.close();
     239                                fos.flush();
     240                                fos.close();
     241                        } catch (IOException e) {
     242                                e.printStackTrace();
     243                        }
     244                }
     245        }
     246
    35247}
  • applications/editors/josm/plugins/smed/src/smed/menu/SmedMenuBar.java

    r23324 r23382  
    3838
    3939        menuItem.addActionListener(new java.awt.event.ActionListener() {
    40                
    41                         public void actionPerformed(java.awt.event.ActionEvent e) {
    42                                 DefaultListModel myModel = new DefaultListModel();
    43                                 plugins = SmedTabbedPane.getPlugins();
    44 
    45                                 for(SmedPluggable p : plugins) myModel.addElement (p.getName());
    46                                
    47                                 new TabManager(myModel);
    48                         }
    49                 });
     40                        public void actionPerformed(java.awt.event.ActionEvent e) { new TabManager(); }
     41                        });
    5042
    5143
  • applications/editors/josm/plugins/smed/src/smed/menu/file/TabManager.java

    r23324 r23382  
    33
    44import javax.swing.DefaultListModel;
     5import javax.swing.Icon;
     6import javax.swing.JComponent;
    57import javax.swing.JDialog;
    68import javax.swing.JScrollPane;
     9import javax.swing.JTabbedPane;
    710
    811import javax.swing.JPanel;
     
    1316import java.awt.event.ActionEvent;
    1417import java.awt.event.ActionListener;
     18import java.awt.event.KeyEvent;
     19import java.io.IOException;
    1520import java.util.List;
    1621
     
    1823import javax.swing.JTextField;
    1924
     25import org.openstreetmap.josm.Main;
     26
     27import smed.io.SmedFile;
    2028import smed.jide.swing.CheckBoxList;
    2129import smed.jide.swing.CheckBoxListSelectionModel;
     
    3341        private CheckBoxListSelectionModel selModel;
    3442        private List<SmedPluggable> plugins = null;
     43        private SmedFile splugDir = null;
    3544        private int modelSize = 0;
    3645
     
    5261        private JTextField tabTextFieldRename = null;
    5362
    54         public TabManager(DefaultListModel model) {
    55                 this.model = model;
     63        public TabManager() {
     64                model = new DefaultListModel(); //model;
    5665                plugins = SmedTabbedPane.getPlugins();
     66                String pluginDirName = Main.pref.getPluginsDirectory().getAbsolutePath();
     67                splugDir = new SmedFile(pluginDirName + "/splug");
     68               
     69                for(SmedPluggable p : plugins){
     70                        if(splugDir.isVisible(p.getFileName()) && !splugDir.isDeleted(p.getFileName())) model.addElement (p.getName());
     71                        else if(splugDir.isDeleted(p.getFileName())) model.addElement("delete - " + p.getName());
     72                        else model.addElement("invisible - " + p.getName());
     73                }
     74               
    5775                modelSize = model.getSize();
    5876                getTabManagerDialog().setVisible(true);
    5977        }
    6078
     79       
    6180        /**
    6281         * This method initializes tabManagerDialog     
     
    200219                        tabButtonLoad = new JButton();
    201220                        tabButtonLoad.setBounds(new Rectangle(186, 328, 104, 30));
    202                         tabButtonLoad.setFont(new Font("Dialog", Font.BOLD, 12));
     221                        tabButtonLoad.setFont(new Font("Dialog", Font.PLAIN, 12));
    203222                        tabButtonLoad.setText("Load");
    204223                        tabButtonLoad.addActionListener(this);
     
    217236                        tabButtonSave = new JButton();
    218237                        tabButtonSave.setBounds(new Rectangle(293, 328, 104, 30));
    219                         tabButtonSave.setFont(new Font("Dialog", Font.BOLD, 12));
     238                        tabButtonSave.setFont(new Font("Dialog", Font.PLAIN, 12));
    220239                        tabButtonSave.setText("Save");
    221240                        tabButtonSave.addActionListener(this);
     
    234253                        tabButtonDelete = new JButton();
    235254                        tabButtonDelete.setBounds(new Rectangle(186, 362, 104, 30));
     255                        tabButtonDelete.setFont(new Font("Dialog", Font.PLAIN, 12));
    236256                        tabButtonDelete.setText("Delete");
    237257                        tabButtonDelete.addActionListener(this);
     
    250270                        tabButtonVisible = new JButton();
    251271                        tabButtonVisible.setBounds(new Rectangle(293, 362, 104, 30));
     272                        tabButtonVisible.setFont(new Font("Dialog", Font.PLAIN, 12));
    252273                        tabButtonVisible.setText("invisible");
    253274                        tabButtonVisible.addActionListener(this);
     
    309330               
    310331                if(cmd.equals("ok")) {
     332                        int i = 0;
     333                        JTabbedPane tabbedPane = SmedTabbedPane.getTabbedPane();
     334                        Icon icon = null;
     335                       
     336                        for(SmedPluggable p : plugins) {
     337                                String str = model.get(i).toString();
     338
     339                                if(str.length() > 9 && str.substring(0,9).equals("invisible")) {
     340                                        splugDir.setVisible(p.getFileName(),false);
     341                                } else splugDir.setVisible(p.getFileName(),true);
     342                               
     343                                if(str.length() > 6 && str.substring(0,6).equals("delete")) {
     344                                        splugDir.setDeleted(p.getFileName(),true);
     345                                } else splugDir.setDeleted(p.getFileName(),false);
     346                               
     347                                i++;
     348                        }
     349                       
     350                        tabbedPane.removeAll();
     351 
     352                        JComponent panel = null;
     353                       
     354                        for(SmedPluggable p : plugins) {
     355                                if(splugDir.isVisible(p.getFileName()) && !splugDir.isDeleted(p.getFileName())) {
     356                                panel = p.getComponent();
     357                               
     358                                tabbedPane.addTab(p.getName(),icon, panel, p.getInfo());
     359                        }
     360                        }
     361
    311362                        System.out.println("Aufraeumarbeiten beginnen");
    312363                        tabManagerDialog.setVisible(false);
     
    331382                }
    332383               
    333                 if(cmd.equals("invisible")) {
    334                         for(int i = 0; i < modelSize ; i++) {
    335                                 if(selModel.isSelectedIndex(i)) model.set(i,"invisible");                               
    336                         }
    337                 }
    338                
    339                 if(cmd.equals("delete")) {
    340                         for(int i = 0; i < modelSize ; i++) {
    341                                 if(selModel.isSelectedIndex(i)) model.set(i,"");                               
    342                         }
    343                 }
    344                
    345                 if(cmd.equals("undo")) {
    346                         int i = 0;
    347                        
    348                         for(SmedPluggable p : plugins) model.set(i++,p.getName());
    349                         selModel.removeSelectionInterval(0, modelSize - 1);
    350                 }
    351 
     384                if(cmd.equals("invisible")) cmd("invisible - ");
     385                if(cmd.equals("delete")) cmd ("delete - ");
     386                if(cmd.equals("undo"))  cmd("");
     387        }
     388
     389        private void cmd(String s) {
     390                int i = 0;
     391               
     392                for(SmedPluggable p : plugins) {
     393                        if(selModel.isSelectedIndex(i)) model.set(i,s + p.getName());
     394                        i++;
     395                }
    352396        }
    353397
  • applications/editors/josm/plugins/smed/src/smed/plug/ifc/SmedPluggable.java

    r23261 r23382  
    99    boolean stop();
    1010    String getName();
     11    String getFileName();
    1112    String getInfo();
    1213    JComponent getComponent();
  • applications/editors/josm/plugins/smed/src/smed/tabs/SmedTabAction.java

    r23288 r23382  
    5050        JFrame frame = new JFrame("TabbedPaneDemo");
    5151        frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
     52        frame.setResizable(false);
     53        frame.setAlwaysOnTop(true);
    5254
    53         smedMenu.plugins = smedTabs.plugins;
    54        
    5555        //Add content to the window.
    5656        frame.setJMenuBar(smedMenu);
  • applications/editors/josm/plugins/smed/src/smed/tabs/SmedTabbedPane.java

    r23324 r23382  
    11package smed.tabs;
    22
     3import java.awt.Dimension;
    34import java.awt.GridLayout;
    45import java.awt.event.KeyEvent;
     
    1415import org.openstreetmap.josm.Main;
    1516
     17import smed.io.SmedFile;
    1618import smed.plug.ifc.SmedPluggable;
    1719import smed.plug.util.SmedPluginLoader;
     
    2527
    2628        static private List<SmedPluggable> plugins = null;
     29        static private JTabbedPane tabbedPane = null;
    2730       
    2831    public SmedTabbedPane() {
     
    3033
    3134        String pluginDirName = Main.pref.getPluginsDirectory().getAbsolutePath();
     35       
    3236                try {
    3337            plugins = SmedPluginLoader.loadPlugins(new File(pluginDirName + "/splug"));
    3438
     39            if(plugins != null) {
     40                Icon icon = null;
     41                tabbedPane = new JTabbedPane();
     42               
     43                JComponent panel;
     44                int i = 0;
     45                SmedFile splugDir = new SmedFile(pluginDirName + "/splug");
     46           
     47                for(SmedPluggable p : plugins) {
     48                        if(splugDir.isVisible(p.getFileName())) {
     49                                panel = p.getComponent();
     50                               
     51                                tabbedPane.addTab(p.getName(),icon, panel, p.getInfo());
     52                                tabbedPane.setMnemonicAt(i, KeyEvent.VK_1 + i);
     53                       
     54                                i++;
     55                        } else splugDir.setVisible(p.getFileName(),false);
     56                }
     57               
     58                //Add the tabbed pane to this panel.
     59                add(tabbedPane);
     60
     61                tabbedPane.setPreferredSize(new Dimension(400, 400));
     62               
     63                //The following line enables to use scrolling tabs.
     64                tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
     65                }
    3566        } catch (IOException e) {
    3667            e.printStackTrace();
    37         }
     68        } 
    3869
    39         if(plugins != null) {
    40             Icon icon = null;
    41             JTabbedPane tabbedPane = new JTabbedPane();
    42 
    43             JComponent panel;
    44             int i = 0;
    45             for(SmedPluggable p : plugins) {
    46                 panel = p.getComponent();
    47                 tabbedPane.addTab(p.getName(),icon, panel, p.getInfo());
    48                 tabbedPane.setMnemonicAt(i, KeyEvent.VK_1 + i);
    49 
    50                 i++;
    51             }
    52 
    53             //Add the tabbed pane to this panel.
    54             add(tabbedPane);
    55 
    56             //The following line enables to use scrolling tabs.
    57             tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
    58         }
    59     }
     70    }
    6071   
    61     public static List<SmedPluggable> getPlugins() {
    62                 return plugins;
    63     }
     72    public static List<SmedPluggable> getPlugins() { return plugins; }
     73    public static JTabbedPane getTabbedPane() { return tabbedPane; }
    6474}
  • applications/editors/josm/plugins/smed_about/build.xml

    r23244 r23382  
    134134    -->
    135135                        <manifest>
    136                                 <attribute name="Author" value="Werner, Malcolm"/>
     136                                <attribute name="Author" value="Werner"/>
    137137                                <attribute name="Plugin-Class" value="smed.Smed"/>
    138138                                <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
     
    188188    -->
    189189                        <manifest>
    190                                 <attribute name="Author" value="Werner, Malcolm"/>
     190                                <attribute name="Author" value="Werner"/>
    191191                                <attribute name="Plugin-Class" value="smed_ex.impl.SmedExImpl"/>
    192192                                <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
  • applications/editors/josm/plugins/smed_about/src/smed_about/SmedAbout.java

    r23261 r23382  
    1212public class SmedAbout implements SmedPluggable{
    1313
     14        private boolean visible = true;
     15       
    1416    private JPanel jPanel = null;  //  @jve:decl-index=0:visual-constraint="43,24"
    1517    private JLabel jLabel = null;
     
    7880    }
    7981
     82        @Override
     83        public String getFileName() { return "smed_about.jar"; }
    8084}
  • applications/editors/josm/plugins/smed_ex/build.xml

    r23244 r23382  
    135135    -->
    136136                        <manifest>
    137                                 <attribute name="Author" value="Werner, Malcolm"/>
     137                                <attribute name="Author" value="Werner"/>
    138138                                <attribute name="Plugin-Class" value="smed.Smed"/>
    139139                                <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
     
    188188    -->
    189189                        <manifest>
    190                                 <attribute name="Author" value="Werner, Malcolm"/>
     190                                <attribute name="Author" value="Werner"/>
    191191                                <attribute name="Plugin-Class" value="smed_ex.impl.SmedExImpl"/>
    192192                                <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
  • applications/editors/josm/plugins/smed_ex/src/smed_ex/SmedEx.java

    r23261 r23382  
    1616public class SmedEx implements SmedPluggable {
    1717
     18        private boolean visible = true;
     19       
    1820    private JPanel jPanel = null;  //  @jve:decl-index=0:visual-constraint="78,30"
    1921    private JButton jButton = null;
     
    9395    }
    9496
     97        @Override
     98        public String getFileName() { return "smed_ex.jar"; }
    9599}
Note: See TracChangeset for help on using the changeset viewer.