/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * Licensed 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.drools.workbench.jcr2vfsmigration; import org.jboss.weld.environment.se.Weld; import org.jboss.weld.environment.se.WeldContainer; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; public class JcrExporterLauncher { private Weld weld; private WeldContainer weldContainer; private JcrExporter exporter; public static void main( String[] args ) { try { new JcrExporterLauncher().run( args ); } catch ( Exception e ) { e.printStackTrace(); System.exit( -1 ); } } /** * Use this method instead of #main() when you want to use the app directly from code. Method does not use System.exit() * and instead throws {@link RuntimeException} when an error occurs. * @param args application arguments - same as for #main() method */ public void run( String... args ) { startUp(); try { launchExport( args ); } finally { shutdown(); } } private void launchExport( String... args ) { if ( exporter.parseArgs( args ) ) { exporter.exportAll(); } } private void shutdown() { weld.shutdown(); } private void startUp() { // As per BRDRLPersistence.marshalRHS() disableAnnoyingJackrabbitSysouts(); String dateFormatProperty = System.getProperty( "drools.dateformat" ); if (dateFormatProperty == null || dateFormatProperty.length() == 0) System.setProperty( "drools.dateformat", "dd-MM-yyyy" ); weld = new Weld(); weldContainer = weld.initialize(); exporter = weldContainer.instance().select( JcrExporter.class ).get(); } private void disableAnnoyingJackrabbitSysouts() { final PrintStream origSysout = System.out; System.setOut(new JackrabbitFilteredPrintStream(origSysout)); } /** * This class is used to filter out annoying sysouts coming from the Jackrabbit (JR). During migration JR prints * "=============== session-guest-X" messages which aren't relevant. This class is basically a hack, which enables * ignoring sysouts starting with "=============== session-guest". Other messages are passed to the delegate * (which should the original value of System.out). * * Note that only the println(String) method is filtered (it is enough for the JR use case). */ private static class JackrabbitFilteredPrintStream extends PrintStream { private final PrintStream delegate; private JackrabbitFilteredPrintStream(PrintStream delegate) { // pass NO-OP instance as it won't be used super(new OutputStream() { @Override public void write(int b) throws IOException { throw new IllegalStateException("NO-OP OutputStream.write() method called!"); } }); this.delegate = delegate; } @Override public void flush() { delegate.flush(); } @Override public void close() { delegate.close(); } @Override public void write(int b) { delegate.write(b); } @Override public void write(byte[] b) throws IOException {delegate.write(b);} @Override public void write(byte[] buf, int off, int len) {delegate.write(buf, off, len);} @Override public void print(boolean b) {delegate.print(b);} @Override public void print(char c) {delegate.print(c);} @Override public void print(int i) {delegate.print(i);} @Override public void print(long l) {delegate.print(l);} @Override public void print(float f) {delegate.print(f);} @Override public void print(double d) {delegate.print(d);} @Override public void print(char[] s) {delegate.print(s);} @Override public void print(String s) {delegate.print(s);} @Override public void print(Object obj) {delegate.print(obj);} @Override public void println() {delegate.println();} @Override public void println(boolean b) {delegate.println(b);} @Override public void println(char c) {delegate.println(c);} @Override public void println(int i) {delegate.println(i);} @Override public void println(long l) {delegate.println(l);} @Override public void println(float f) {delegate.println(f);} @Override public void println(double d) {delegate.println(d);} @Override public void println(char[] s) {delegate.println(s);} @Override public void println(Object obj) {delegate.println(obj);} @Override public java.io.PrintStream printf(String format, Object... args) { return delegate.printf(format, args); } @Override public java.io.PrintStream printf(java.util.Locale l, String format, Object... args) { return delegate.printf(l, format, args); } @Override public java.io.PrintStream format(String format, Object... args) { return delegate.format(format, args); } @Override public java.io.PrintStream format(java.util.Locale l, String format, Object... args) { return delegate.format(l, format, args); } @Override public java.io.PrintStream append(CharSequence csq) { return delegate.append(csq); } @Override public java.io.PrintStream append(CharSequence csq, int start, int end) { return delegate.append(csq, start, end); } @Override public java.io.PrintStream append(char c) { return delegate.append(c); } @Override public void println(String msg) { if (msg.startsWith("=============== session-guest")) { return; } delegate.println(msg); } } }