Package org.wiztools.restclient.ui.resbody

Source Code of org.wiztools.restclient.ui.resbody.ResBodyTextPanel

package org.wiztools.restclient.ui.resbody;

import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.wiztools.restclient.IGlobalOptions;
import org.wiztools.restclient.ServiceLocator;
import org.wiztools.restclient.XMLException;
import org.wiztools.restclient.bean.ContentType;
import org.wiztools.restclient.ui.*;
import org.wiztools.restclient.util.HTMLIndentUtil;
import org.wiztools.restclient.util.HttpUtil;
import org.wiztools.restclient.util.JSONUtil;
import org.wiztools.restclient.util.XMLIndentUtil;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import org.wiztools.restclient.ui.component.BodyPopupMenu;
import org.wiztools.restclient.ui.component.BodyPopupMenuListener;

/**
*
* @author subwiz
*/
public class ResBodyTextPanel extends AbstractResBody implements FontableEditor {
    @Inject RESTView view;
   
    // Response
    private final ScriptEditor se_response = ScriptEditorFactory.getXMLScriptEditor();
   
    private BodyPopupMenu bodyPopupMenu;
   
    @PostConstruct
    protected void init() {
        se_response.setEditable(false);
       
        // First the pop-up menu for xml formatting:
        BodyPopupMenuListener listener = new BodyPopupMenuListener() {
            @Override
            public void onSuccess(String msg) {
                view.setStatusMessage(msg);
            }

            @Override
            public void onFailure(String msg) {
                view.setStatusMessage(msg);
            }

            @Override
            public void onMessage(String msg) {
                view.setStatusMessage(msg);
            }
        };
        final BodyPopupMenu bpm = new BodyPopupMenu(se_response, listener, true);
        this.bodyPopupMenu = bpm;
       
        // Attach popup menu
        if (se_response.getEditorComponent() instanceof RSyntaxTextArea) {
            se_response.getEditorComponent().addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    showPopup(e);
                }

                @Override
                public void mouseReleased(MouseEvent e) {
                    showPopup(e);
                }
                private void showPopup(final MouseEvent e) {
                    if("".equals(se_response.getText().trim())){
                        // No response body
                        return;
                    }
                    if (e.isPopupTrigger()) {
                        bpm.show(e.getComponent(), e.getX(), e.getY());
                    }
                }
            });
        }
       
        // Layout
        setBorder(BorderFactory.createEmptyBorder());
        setLayout(new GridLayout());
        add(se_response.getEditorView());
    }
   
    @Override
    public void setEditorFont(Font font) {
        se_response.getEditorComponent().setFont(font);
    }

    @Override
    public Font getEditorFont() {
        return se_response.getEditorComponent().getFont();
    }

    @Override
    public void setBody(byte[] body, ContentType type) {
        // Call super method
        super.setBody(body, type);
       
        bodyPopupMenu.cancelRunningJob();
       
        // JSON or XML?
        boolean isXml = false;
        boolean isJson = false;
        boolean isHTML = false;

        if(type != null) {
            if(HttpUtil.isXmlContentType(type.getContentType())){
                isXml = true;
            }
            else if(HttpUtil.isJsonContentType(type.getContentType())){
                isJson = true;
            }
            else if(HttpUtil.isHTMLContentType(type.getContentType())){
                isHTML = true;
            }
        }
       
        // Get the options:
        IGlobalOptions options = ServiceLocator.getInstance(IGlobalOptions.class);
       
        // Set syntax color:
        if(options.isPropertyTrue("response.body.syntax.color")) {
            if(isXml) {
                se_response.setSyntax(TextEditorSyntax.XML);
            }
            if(isJson) {
                se_response.setSyntax(TextEditorSyntax.JSON);
            }
            if(isHTML) {
                se_response.setSyntax(TextEditorSyntax.HTML);
            }
        }
        else { // No syntax!
            se_response.setSyntax(TextEditorSyntax.NONE);
        }
       
        // Find if you need to indent
        final String responseBody = new String(getBody(), HttpUtil.getCharsetDefault(type));
        if(options.isPropertyTrue("response.body.indent")) {
            if(isXml){
                try{
                    String indentedResponseBody = XMLIndentUtil.getIndented(responseBody);
                    se_response.setText(indentedResponseBody);
                }
                catch(IOException ex){
                    view.setStatusMessage("XML indentation failed.");
                    // LOG.warning(ex.getMessage());
                    se_response.setText(responseBody);
                }
                catch(XMLException ex){
                    view.setStatusMessage("XML indentation failed.");
                    // LOG.warning(ex.getMessage());
                    se_response.setText(responseBody);
                }
            }
            else if(isJson){
                try{
                    String indentedResponseBody = JSONUtil.indentJSON(responseBody);
                    se_response.setText(indentedResponseBody);
                }
                catch(JSONUtil.JSONParseException ex){
                    view.setStatusMessage("JSON indentation failed.");
                    se_response.setText(responseBody);
                }
            }
            else if(isHTML){
                try{
                    String indentedResponseBody = HTMLIndentUtil.getIndented(responseBody);
                    se_response.setText(indentedResponseBody);
                }
                catch(Exception ex){
                    view.setStatusMessage("HTML indentation failed.");
                    se_response.setText(responseBody);
                }
            }
            else{
                view.setStatusMessage("Response body neither XML,HTML nor JSON. No indentation.");
                se_response.setText(responseBody);
            }
        }
        else { // No indentation
            se_response.setText(responseBody);
        }
        se_response.setCaretPosition(0);
    }
   
    @Override
    public void clearUI() {
        se_response.setText("");
    }
}
TOP

Related Classes of org.wiztools.restclient.ui.resbody.ResBodyTextPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.