Eclipse 에서 Context Menu 등을 사용할 때에 현재 Selection 한 객체가 어떤종류의 객체인지(IEditor 인지, IResource 인지) 판별을 해야 할 경우가 있다.


이때 주로 selection 의 instanceof 로 보고 확인하는데, 현재 선택한 Selection 정보를 보통 다음과 같이 가져온다.

IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
ISelection selection = window.getSelectionService().getSelection();

if ( selection instanceof ITreeSelection ) {
    ...code...
} else if ( selection instanceof ITextSelection ) {
    ...code...
}

ISelection 은 다음과 같이 정의되어 있다.



위의 정의를 참고하여, 현재 Selection 한 객체가 Package Explorer 에서 Selection 한것인지 확인하려면 ITreeSection 이나 IStructuredSelection 으로 확인하고,

if ( selection instanceof ITreeSelection ) {
    // selected object in a tree view
    ...code...
}


Editor 에서 Selection 한것인지 확인하려면 ITextSelection 으로 확인하면 된다.

if ( selection instanceof ITextSelection ) {
    // selected text in a editor
    ...code...
}


Posted by leechwin
,

Java 에서 쓸 수 있는 Web Resource Compressor  관련 Framework 에 대해 간단히 소개해보고자 한다.


Web Resource Compressor  란 html, javascript, css 파일에 대한 Minifier, Beautifier 등의 기능을 수행하는 것을 말한다.


일종의 Web Resource 최적화 Framework 중 하나이다.



- Introduction


- How to use?

  • HTML Minifier - HTML Compressor 

    public void compress(InputStream source, OutputStream target) throws IOException {
        HtmlCompressor compressor = new HtmlCompressor();
        compressor.setCompressJavaScript(true); // compress inline css
        compressor.setCompressCss(true);        // compress inline javascript

        String compressedHtml = compressor.compress( IOUtil.getString( source, true ) );
        target.write( compressedHtml.getBytes() );
    }

  • XML Minifier - HTML Compressor 

    public void compress(InputStream source, OutputStream target) throws IOException {
        XmlCompressor compressor = new XmlCompressor();

        String compressedXml = compressor.compress( IOUtil.getString( source, true ) );
        target.write( compressedXml.getBytes() );
    }

  • JavaScript Minifier YUI Compressor 

    public void compress( InputStream source, OutputStream target ) throws EvaluatorException, IOException {
        InputStreamReader reader = null;
        OutputStreamWriter writer = null;
        try {
            reader = new InputStreamReader(source);
            writer = new OutputStreamWriter(target);
            JavaScriptCompressor compressor = new JavaScriptCompressor( reader,new ErrorReporter() {
                @Override
                public void warning(String message, String sourceName, int line, String lineSource, int lineOffset) {
                    if (line < 0) {
                        logger.warn(message);
                    } else {
                        String logMessage = line + " : " + lineOffset + " : " + message;
                        logger.warn(logMessage);
                    }
                }
                @Override
                public void error(String message, String sourceName, int line, String lineSource, int lineOffset)  {
                    if (line < 0) {
                        logger.error(message);
                    } else {
                        String logMessage = line + " : " + lineOffset + " : " + message;
                        logger.error(logMessage);
                    }
                }
                @Override
                public EvaluatorException runtimeError(String message, String sourceName, int line, String lineSource, int lineOffset) {
                    error(message, sourceName, line, lineSource, lineOffset);
                    return new EvaluatorException(message);
                }
            });

            // (out, linebreak, munge, verbose, preserveAllSemiColons, disableOptimizations)
            compressor.compress( writer, -1, true, false, true, false);

        } catch (EvaluatorException e) {
            throw e;
        } catch (IOException e) {
            throw e;
        } finally {
            if ( reader != null ) { reader.close() };
            if ( writer != null ) { writer.close() };
        }
    }

  • CSS Minifier - YUI Compressor 

    public void compress(InputStream source, OutputStream target) throws IOException {
        InputStreamReader reader = null;
        OutputStreamWriter writer = null;
        try {
            reader = new InputStreamReader(source);
            writer = new OutputStreamWriter(target);
            CssCompressor compressor = new CssCompressor(reader);
            compressor.compress(writer, -1);
        } catch (IOException e) {
            throw e;
        } finally {
            if ( reader != null ) { reader.close() };
            if ( writer != null ) { writer.close() };
        }
    }

Posted by leechwin
,

Java Decompiler 설치

Eclipse 2013. 5. 6. 22:01

Eclipse 에서 Java 의 class 파일을 보기쉽게 Decompile 해주는 툴 설치하는 법을 알아보자.


JD-Eclipse

Eclipse 에서 Java Decompiler 을 해주는 툴인 JD-Eclipse 설치법을 알아보자.

  • 설치법은 아래 URL에서 JD-Eclipse의 Download 탭에서 jd-eclipse-site-XXX.zip 파일을 다운받는다.
  • 다운받은후 Widnow > Help > Install New Software > Add 버튼을 누르고 Location에 다운받은 zip 파일을 선택하고 설치를 하면 쉽게 JD-Eclipse 플러그인이 설치가 된다.


JadClipse

Eclipse 에서 Java Decompiler 을 해주는 툴인 JadClipse 설치법을 알아보자.

  • Eclipse 4.x 이상 버전부터는 eclipse market place에서 바로 설치가 가능하다.
  • 수동으로 설치하려면 Update Site 에 다음 URL 을 입력하면 설치가 가능하다.
  • Update Site 에서 설치가 끝나면 Window > Preferences > Java > Decompiler 에서 추가 설정이 가능하다.



Posted by leechwin
,