[ 
https://issues.apache.org/jira/browse/SYNCOPE-808?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15622513#comment-15622513
 ] 

ASF GitHub Bot commented on SYNCOPE-808:
----------------------------------------

Github user ilgrosso commented on a diff in the pull request:

    https://github.com/apache/syncope/pull/39#discussion_r85767004
  
    --- Diff: 
ide/netbeans/src/main/java/org/apache/syncope/netbeans/plugin/view/ResourceExplorerTopComponent.java
 ---
    @@ -0,0 +1,550 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + *   http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing,
    + * software distributed under the License is distributed on an
    + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    + * KIND, either express or implied.  See the License for the
    + * specific language governing permissions and limitations
    + * under the License.
    + */
    +package org.apache.syncope.netbeans.plugin.view;
    +
    +import java.awt.event.ActionEvent;
    +import java.awt.event.ActionListener;
    +import java.awt.event.MouseEvent;
    +import java.beans.PropertyChangeListener;
    +import java.io.BufferedReader;
    +import java.io.File;
    +import java.io.FileNotFoundException;
    +import java.io.FileReader;
    +import java.io.FileWriter;
    +import java.io.IOException;
    +import java.io.InputStream;
    +import java.nio.charset.Charset;
    +import java.util.List;
    +import javax.swing.Action;
    +import javax.swing.JMenuItem;
    +import javax.swing.JOptionPane;
    +import javax.swing.JPopupMenu;
    +import javax.swing.text.BadLocationException;
    +import javax.swing.text.Document;
    +import javax.swing.text.JTextComponent;
    +import javax.swing.tree.DefaultMutableTreeNode;
    +import javax.swing.tree.DefaultTreeModel;
    +import org.apache.commons.io.IOUtils;
    +import org.apache.syncope.common.lib.to.MailTemplateTO;
    +import org.apache.syncope.common.lib.to.ReportTemplateTO;
    +import org.apache.syncope.common.lib.types.MailTemplateFormat;
    +import org.apache.syncope.common.lib.types.ReportTemplateFormat;
    +import org.apache.syncope.netbeans.plugin.connector.ResourceConnector;
    +import org.apache.syncope.netbeans.plugin.constants.PluginConstants;
    +import 
org.apache.syncope.netbeans.plugin.service.MailTemplateManagerService;
    +import 
org.apache.syncope.netbeans.plugin.service.ReportTemplateManagerService;
    +import org.netbeans.api.editor.EditorRegistry;
    +import org.netbeans.api.progress.ProgressHandle;
    +import org.netbeans.api.progress.ProgressHandleFactory;
    +import org.netbeans.api.settings.ConvertAsProperties;
    +import org.openide.awt.ActionID;
    +import org.openide.awt.ActionReference;
    +import org.openide.cookies.OpenCookie;
    +import org.openide.filesystems.FileObject;
    +import org.openide.filesystems.FileUtil;
    +import org.openide.loaders.DataObject;
    +import org.openide.util.Cancellable;
    +import org.openide.util.Exceptions;
    +import org.openide.util.RequestProcessor;
    +import org.openide.windows.TopComponent;
    +
    +/**
    + * Top component which displays something.
    + */
    +@ConvertAsProperties(
    +        dtd = 
"-//org.apache.syncope.netbeans.plugin//ResourceExplorer//EN",
    +        autostore = false
    +)
    +@TopComponent.Description(
    +        preferredID = "ResourceExplorerTopComponent",
    +        iconBase = "images/syncope.png",
    +        persistenceType = TopComponent.PERSISTENCE_ALWAYS
    +)
    +@TopComponent.Registration(mode = "explorer", openAtStartup = false)
    +@ActionID(category = "Window", id = 
"org.apache.syncope.netbeans.plugin.ResourceExplorerTopComponent")
    +@ActionReference(path = "Menu/Window" /*, position = 333 */)
    +@TopComponent.OpenActionRegistration(
    +        displayName = "Apache Syncope",
    +        preferredID = "ResourceExplorerTopComponent"
    +)
    +
    +public final class ResourceExplorerTopComponent extends TopComponent {
    +
    +    private DefaultTreeModel treeModel;
    +    private DefaultMutableTreeNode root;
    +    private DefaultMutableTreeNode mailTemplates;
    +    private DefaultMutableTreeNode reportXslts;
    +    private MailTemplateManagerService mailTemplateManagerService;
    +    private ReportTemplateManagerService reportTemplateManagerService;
    +    private Charset encodingPattern;
    +
    +    public ResourceExplorerTopComponent() {
    +
    +        initComponents();
    +        setName(PluginConstants.DISPLAY_NAME);
    +        setToolTipText(PluginConstants.TOOL_TIP_TEXT);
    +
    +        treeModel = (DefaultTreeModel) resourceExplorerTree.getModel();
    +        root = (DefaultMutableTreeNode) treeModel.getRoot();
    +        DefaultMutableTreeNode visibleRoot
    +                = new DefaultMutableTreeNode(PluginConstants.DISPLAY_NAME);
    +        mailTemplates = new 
DefaultMutableTreeNode(PluginConstants.MAIL_TEMPLTAE_CONSTANT);
    +        reportXslts = new 
DefaultMutableTreeNode(PluginConstants.REPORT_XSLTS_CONSTANT);
    +        root.add(visibleRoot);
    +        visibleRoot.add(mailTemplates);
    +        visibleRoot.add(reportXslts);
    +        treeModel.reload();
    +
    +    }
    +
    +    /**
    +     * This method is called from within the constructor to initialize the 
form. WARNING: Do NOT modify this code. The
    +     * content of this method is always regenerated by the Form Editor.
    +     */
    +    // <editor-fold defaultstate="collapsed" desc="Generated 
Code">//GEN-BEGIN:initComponents
    +    private void initComponents() {
    +
    +        jScrollPane1 = new javax.swing.JScrollPane();
    +        resourceExplorerTree = new javax.swing.JTree();
    +
    +        javax.swing.tree.DefaultMutableTreeNode treeNode1 = new 
javax.swing.tree.DefaultMutableTreeNode("root");
    +        resourceExplorerTree.setModel(new 
javax.swing.tree.DefaultTreeModel(treeNode1));
    +        resourceExplorerTree.setRootVisible(false);
    +        resourceExplorerTree.setScrollsOnExpand(true);
    +        resourceExplorerTree.addMouseListener(new 
java.awt.event.MouseAdapter() {
    +            public void mouseClicked(final java.awt.event.MouseEvent evt) {
    +                resourceExplorerTreeMouseClicked(evt);
    +            }
    +        });
    +        jScrollPane1.setViewportView(resourceExplorerTree);
    +
    +        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
    +        this.setLayout(layout);
    +        layout.setHorizontalGroup(
    +            
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    +            .addComponent(jScrollPane1, 
javax.swing.GroupLayout.DEFAULT_SIZE, 258, Short.MAX_VALUE)
    +        );
    +        layout.setVerticalGroup(
    +            
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    +            .addComponent(jScrollPane1, 
javax.swing.GroupLayout.DEFAULT_SIZE, 445, Short.MAX_VALUE)
    +        );
    +    }
    +    // </editor-fold>//GEN-END:initComponents
    +
    +    private void resourceExplorerTreeMouseClicked(final 
java.awt.event.MouseEvent evt) {
    +        if (evt.getButton() == MouseEvent.BUTTON1 && evt.getClickCount() 
== 2) {
    +            DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) 
resourceExplorerTree.
    +                    getLastSelectedPathComponent();
    +            DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) 
selectedNode.getParent();
    +            if (selectedNode.isLeaf()) {
    +                String name = (String) selectedNode.getUserObject();
    +                if 
(parentNode.getUserObject().equals(PluginConstants.MAIL_TEMPLTAE_CONSTANT)) {
    +                    try {
    +                        openMailEditor(name);
    +                    } catch (IOException ex) {
    +                        Exceptions.printStackTrace(ex);
    +                    }
    +                } else {
    +                    try {
    +                        openReportEditor(name);
    +                    } catch (IOException ex) {
    +                        Exceptions.printStackTrace(ex);
    +                    }
    +                }
    +            }
    +        } else if (evt.getButton() == MouseEvent.BUTTON3 && 
evt.getClickCount() == 1) {
    +            DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) 
resourceExplorerTree.
    +                    getLastSelectedPathComponent();
    +            String selectedNodeName = (String) 
selectedNode.getUserObject();
    +            if (selectedNode.isLeaf()) {
    +                leafRightClickAction(evt, selectedNode);
    +            } else if 
(selectedNodeName.equals(PluginConstants.MAIL_TEMPLTAE_CONSTANT)) {
    +                folderRightClickAction(evt, mailTemplates);
    +            } else if 
(selectedNodeName.equals(PluginConstants.REPORT_XSLTS_CONSTANT)) {
    +                folderRightClickAction(evt, reportXslts);
    +            } else if 
(selectedNodeName.equals(PluginConstants.DISPLAY_NAME)) {
    +                rootRightClickAction(evt);
    +            }
    +        }
    +    }
    +
    +    // Variables declaration - do not modify//GEN-BEGIN:variables
    +    private javax.swing.JScrollPane jScrollPane1;
    +    private javax.swing.JTree resourceExplorerTree;
    +    // End of variables declaration//GEN-END:variables
    +
    +    @Override
    +    public void componentOpened() {
    +        File file = new File("UserData.txt");
    +        if (!file.exists()) {
    +            new ServerDetailsView(null, true).setVisible(true);
    +        }
    +        try {
    +            mailTemplateManagerService = 
ResourceConnector.getMailTemplateManagerService();
    +        } catch (IOException ex) {
    +            JOptionPane.showMessageDialog(null, "Error Occured.", "Error",
    +                    JOptionPane.ERROR_MESSAGE);
    +            new ServerDetailsView(null, true).setVisible(true);
    +        }
    +        try {
    +            reportTemplateManagerService
    +                    = ResourceConnector.getReportTemplateManagerService();
    +        } catch (IOException ex) {
    +            new ServerDetailsView(null, true).setVisible(true);
    +        }
    +
    +        Runnable tsk = new Runnable() {
    +            @Override
    +            public void run() {
    +                final ProgressHandle progr = 
ProgressHandleFactory.createHandle("Loading Templates", new Cancellable() {
    +                    @Override
    +                    public boolean cancel() {
    +                        return true;
    +                    }
    +                }, new Action() {
    +                    @Override
    +                    public Object getValue(final String key) {
    +                        return null;
    +                    }
    +
    +                    @Override
    +                    public void putValue(final String key, final Object 
value) {
    +                    }
    +
    +                    @Override
    +                    public void setEnabled(final boolean b) {
    +                    }
    +
    +                    @Override
    +                    public boolean isEnabled() {
    +                        return false;
    +                    }
    +
    +                    @Override
    +                    public void addPropertyChangeListener(final 
PropertyChangeListener listener) {
    +                    }
    +
    +                    @Override
    +                    public void removePropertyChangeListener(final 
PropertyChangeListener listener) {
    +                    }
    +
    +                    @Override
    +                    public void actionPerformed(final ActionEvent e) {
    +                    }
    +                });
    +
    +                progr.start();
    +                progr.progress("Loading Templates.");
    +                addMailTemplates();
    +                addReportXslts();
    +                progr.finish();
    +            }
    +
    +        };
    +        RequestProcessor.getDefault().post(tsk);
    +    }
    +
    +    @Override
    +    public void componentClosed() {
    +        // TODO add custom code on component closing
    +    }
    +
    +    void writeProperties(final java.util.Properties p) {
    +        // better to version settings since initial version as advocated at
    +        // http://wiki.apidesign.org/wiki/PropertyFiles
    +        p.setProperty("version", "1.0");
    +        // TODO store your settings
    +    }
    +
    +    void readProperties(final java.util.Properties p) {
    +        String version = p.getProperty("version");
    +        // TODO read your settings according to their version
    +    }
    +
    +    private void addMailTemplates() {
    +        List<MailTemplateTO> mailTemplateList = 
mailTemplateManagerService.list();
    +        for (MailTemplateTO mailTemplate : mailTemplateList) {
    +            this.mailTemplates.add(new DefaultMutableTreeNode(
    +                    mailTemplate.getKey()));
    +        }
    +        treeModel.reload();
    +    }
    +
    +    private void addReportXslts() {
    +        List<ReportTemplateTO> reportTemplates = 
reportTemplateManagerService.list();
    +        for (ReportTemplateTO reportTemplate : reportTemplates) {
    +            reportXslts.add(new DefaultMutableTreeNode(
    +                    reportTemplate.getKey()));
    +        }
    +        treeModel.reload();
    +    }
    +
    +    private void rootRightClickAction(final MouseEvent evt) {
    +        JPopupMenu menu = new JPopupMenu();
    +        JMenuItem saveItem = new JMenuItem("Save");
    +        JMenuItem resetConnectionItem = new JMenuItem("Reset Connection");
    +        menu.add(saveItem);
    +        menu.add(resetConnectionItem);
    +
    +        saveItem.addActionListener(new ActionListener() {
    +            @Override
    +            public void actionPerformed(final ActionEvent e) {
    +                saveContent();
    +            }
    +        });
    +
    +        resetConnectionItem.addActionListener(new ActionListener() {
    +            @Override
    +            public void actionPerformed(final ActionEvent e) {
    +                File file = new File("UserData.txt");
    +                try {
    +                    BufferedReader bf = new BufferedReader(new 
FileReader(file));
    +                    String host = bf.readLine();
    +                    String userName = bf.readLine();
    +                    String password = bf.readLine();
    +                    ServerDetailsView serverDetails = new 
ServerDetailsView(null, true);
    +                    serverDetails.setDetails(host, userName, password);
    +                    serverDetails.setVisible(true);
    +                } catch (FileNotFoundException ex) {
    +                    Exceptions.printStackTrace(ex);
    +                } catch (IOException ex) {
    +                    Exceptions.printStackTrace(ex);
    +                }
    +            }
    +        });
    +
    +        menu.show(evt.getComponent(), evt.getX(), evt.getY());
    +    }
    +
    +    private void folderRightClickAction(final MouseEvent evt,
    +            final DefaultMutableTreeNode node) {
    +        JPopupMenu menu = new JPopupMenu();
    +        JMenuItem addItem = new JMenuItem("New");
    +        menu.add(addItem);
    +
    +        addItem.addActionListener(new ActionListener() {
    +            @Override
    +            public void actionPerformed(final ActionEvent e) {
    +                String name = JOptionPane.showInputDialog("Enter Name");
    +                boolean added = false;
    +                if (node.getUserObject().equals(
    +                        PluginConstants.MAIL_TEMPLTAE_CONSTANT)) {
    +                    MailTemplateTO mailTemplate = new MailTemplateTO();
    +                    mailTemplate.setKey(name);
    +                    added = 
mailTemplateManagerService.create(mailTemplate);
    +                    mailTemplateManagerService.setFormat(name,
    +                            MailTemplateFormat.HTML,
    +                            IOUtils.toInputStream("//Enter Content here", 
encodingPattern));
    +                    mailTemplateManagerService.setFormat(name,
    +                            MailTemplateFormat.TEXT,
    +                            IOUtils.toInputStream("//Enter Content here", 
encodingPattern));
    +                    try {
    +                        openMailEditor(name);
    +                    } catch (IOException ex) {
    +                        Exceptions.printStackTrace(ex);
    +                    }
    +                } else {
    +                    ReportTemplateTO reportTemplate = new 
ReportTemplateTO();
    +                    reportTemplate.setKey(name);
    +                    added = 
reportTemplateManagerService.create(reportTemplate);
    +                    reportTemplateManagerService.setFormat(name,
    +                            ReportTemplateFormat.FO,
    +                            IOUtils.toInputStream("//Enter content here", 
encodingPattern));
    +                    reportTemplateManagerService.setFormat(name,
    +                            ReportTemplateFormat.CSV,
    +                            IOUtils.toInputStream("//Enter content here", 
encodingPattern));
    +                    reportTemplateManagerService.setFormat(name,
    +                            ReportTemplateFormat.HTML,
    +                            IOUtils.toInputStream("//Enter content here", 
encodingPattern));
    +                    try {
    +                        openReportEditor(name);
    +                    } catch (IOException ex) {
    +                        Exceptions.printStackTrace(ex);
    +                    }
    +                }
    +
    +                if (added) {
    +                    node.add(new DefaultMutableTreeNode(name));
    +                    treeModel.reload(node);
    +                } else {
    +                    JOptionPane.showMessageDialog(null, "Error while 
creating "
    +                            + "new element", "Error", 
JOptionPane.ERROR_MESSAGE);
    +                }
    +            }
    +        });
    +
    +        menu.show(evt.getComponent(), evt.getX(), evt.getY());
    +    }
    +
    +    private void leafRightClickAction(final MouseEvent evt,
    +            final DefaultMutableTreeNode node) {
    +        JPopupMenu menu = new JPopupMenu();
    +        JMenuItem deleteItem = new JMenuItem("Delete");
    +        menu.add(deleteItem);
    +
    +        deleteItem.addActionListener(new ActionListener() {
    +            public void actionPerformed(final ActionEvent e) {
    +                int result = JOptionPane.showConfirmDialog(null,
    +                        "Do you want to delete ?");
    +                if (result == JOptionPane.OK_OPTION) {
    +                    DefaultMutableTreeNode parent
    +                            = (DefaultMutableTreeNode) node.getParent();
    +                    String name = (String) node.getUserObject();
    +                    boolean deleted;
    +                    if (parent.getUserObject().equals(
    +                            PluginConstants.MAIL_TEMPLTAE_CONSTANT)) {
    +                        deleted = mailTemplateManagerService.delete(
    +                                (String) node.getUserObject());
    +                    } else {
    +                        deleted = reportTemplateManagerService.delete(
    +                                (String) node.getUserObject());
    +                    }
    +                    if (deleted) {
    +                        node.removeFromParent();
    +                        treeModel.reload(parent);
    +                    } else {
    +
    +                        JOptionPane.showMessageDialog(null,
    +                                "Error while deleting new element", 
"Error",
    +                                JOptionPane.ERROR_MESSAGE);
    +                    }
    +                }
    +            }
    +        });
    +
    +        menu.show(evt.getComponent(), evt.getX(), evt.getY());
    +    }
    +
    +    private void openMailEditor(final String name) throws IOException {
    +        String type = "";
    +        String content = "";
    +        InputStream is;
    +        Object format = JOptionPane.showInputDialog(null, "Select File 
Format",
    +                "File format", JOptionPane.QUESTION_MESSAGE, null,
    +                PluginConstants.MAIL_TEMPLATE_FORMATS, "TEXT");
    +
    +        if (format.equals("HTML")) {
    +        type = "html";
    +        is = (InputStream) mailTemplateManagerService.getFormat(name,
    +                MailTemplateFormat.HTML);
    +        content = IOUtils.toString(is, encodingPattern);
    +        } else {
    +            type = "txt";
    +            is = (InputStream) mailTemplateManagerService.getFormat(name,
    +                    MailTemplateFormat.TEXT);
    +            content = IOUtils.toString(is, encodingPattern);
    +        }
    +
    +        File directory = new File("Template/Mail");
    +        if (!directory.exists()) {
    +            directory.mkdirs();
    +        }
    +        File file = new File("Template/Mail/" + name + "." + type);
    +        FileWriter fw = new FileWriter(file);
    +        fw.write(content);
    +        fw.flush();
    +        FileObject fob = FileUtil.toFileObject(file.getAbsoluteFile());
    +        fob.setAttribute("description", "TEXT");
    +        DataObject data = DataObject.find(fob);
    +        OpenCookie cookie = (OpenCookie) data.getCookie(OpenCookie.class);
    +        cookie.open();
    +    }
    +
    +    private void openReportEditor(final String name) throws IOException {
    +        String type;
    +        String content;
    +        InputStream is;
    +        Object format = JOptionPane.showInputDialog(null, "Select File 
Format",
    +                "File format", JOptionPane.QUESTION_MESSAGE, null,
    +                PluginConstants.REPORT_TEMPLATE_FORMATS, "TEXT");
    +
    +        if (format.equals("HTML")) {
    --- End diff --
    
    Any chance to use the proper enum here?


> Netbeans plugin
> ---------------
>
>                 Key: SYNCOPE-808
>                 URL: https://issues.apache.org/jira/browse/SYNCOPE-808
>             Project: Syncope
>          Issue Type: Sub-task
>          Components: ide
>         Environment: Netbeans IDE
>            Reporter: Francesco Chicchiriccò
>            Assignee: Tushar Mishra
>              Labels: gsoc2016, netbeans
>             Fix For: 2.0.2, 2.1.0
>
>
> Develop a plug-in, according to what reported in SYNCOPE-770, working with 
> latest Netbeans version.
> See Google Summer of Code project proposal at 
> https://summerofcode.withgoogle.com/projects/#5722525799546880



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to