svn commit: rev 46195 - in avalon/trunk/tools/magic-installer: . src src/main src/main/org src/main/org/apache src/main/org/apache/metro src/main/org/apache/metro/installer src/main/org/apache/metro/installer/magic
[email protected] 16 Sep 2004 17:36:00 -0000
| Newsgroups | gmane.comp.jakarta.avalon.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: niclas
Date: Thu Sep 16 10:35:59 2004
New Revision: 46195
Added:
avalon/trunk/tools/magic-installer/
avalon/trunk/tools/magic-installer/build.properties (contents, props changed)
avalon/trunk/tools/magic-installer/build.xml (contents, props changed)
avalon/trunk/tools/magic-installer/src/
avalon/trunk/tools/magic-installer/src/main/
avalon/trunk/tools/magic-installer/src/main/org/
avalon/trunk/tools/magic-installer/src/main/org/apache/
avalon/trunk/tools/magic-installer/src/main/org/apache/metro/
avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/
avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/
avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/ConsoleInstaller.java (contents, props changed)
avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/Main.java (contents, props changed)
avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/ProgressIndicator.java (contents, props changed)
avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/SwingInstaller.java (contents, props changed)
avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/Worker.java (contents, props changed)
Log:
The beginning of a Installer for Magic.
Added: avalon/trunk/tools/magic-installer/build.properties
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/magic-installer/build.properties Thu Sep 16 10:35:59 2004
@@ -0,0 +1,5 @@
+
+project.jar.main.class=org.apache.metro.installer.magic.Main
+
+project.jar.classpath=avalon-tools-magic.jar
+
Added: avalon/trunk/tools/magic-installer/build.xml
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/magic-installer/build.xml Thu Sep 16 10:35:59 2004
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<project name="magic-installer" default="install" basedir="."
+ xmlns:x="antlib:org.apache.avalon.tools"
+>
+ <property file="build.properties"/>
+ <x:home/>
+ <import file="${magic.templates}/standard.xml"/>
+</project>
Added: avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/ConsoleInstaller.java
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/ConsoleInstaller.java Thu Sep 16 10:35:59 2004
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2004 Apache Software Foundation
+ * 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.apache.metro.installer.magic;
+
+import java.io.File;
+
+public class ConsoleInstaller
+{
+ private static final int BUFFER_SIZE = 10000;
+
+ public ConsoleInstaller()
+ {
+ }
+
+ public void start()
+ throws Exception
+ {
+ File userHome = new File( System.getProperty( "user.home" ) );
+ File magicHome = new File( userHome, ".magic" );
+ File antLibDir = new File( userHome, ".ant/lib" );
+
+ ProgressIndicator indicator = new ConsoleProgress();
+ Worker w = new Worker( magicHome, antLibDir );
+ w.start( indicator );
+ }
+
+ public class ConsoleProgress
+ implements ProgressIndicator
+ {
+ public void message( String message )
+ {
+ System.out.println( message );
+ }
+
+ public void start()
+ {
+ System.out.print( "[ ] 0%" );
+ }
+
+ public void progress( int percentage )
+ {
+ int size = percentage / 2;
+ System.out.print( "\r[" );
+ for( int i = 0 ; i < size ; i++ )
+ System.out.print( "*" );
+ for( int i = 0 ; i < 50-size ; i++ )
+ System.out.print( " " );
+ System.out.print( "] " + percentage + "%" );
+ }
+
+ public void finished()
+ {
+ System.out.print( "[**************************************************] 100%" );
+ System.out.println();
+ }
+ }
+}
+
Added: avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/Main.java
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/Main.java Thu Sep 16 10:35:59 2004
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2004 Apache Software Foundation
+ * 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.apache.metro.installer.magic;
+
+public class Main
+{
+ static public void main( String[] args )
+ throws Exception
+ {
+ if( args.length == 0 )
+ {
+ SwingInstaller installer = new SwingInstaller();
+ installer.start();
+ return;
+ }
+ if( args[0].equals( "-console" ) )
+ {
+ ConsoleInstaller installer = new ConsoleInstaller();
+ installer.start();
+ return;
+ }
+
+ if( args[0].equals( "-gui" ) )
+ {
+ SwingInstaller installer = new SwingInstaller();
+ installer.start();
+ return;
+ }
+ }
+}
Added: avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/ProgressIndicator.java
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/ProgressIndicator.java Thu Sep 16 10:35:59 2004
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2004 Apache Software Foundation
+ * 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.apache.metro.installer.magic;
+
+public interface ProgressIndicator
+{
+ void message( String message );
+
+ void start();
+
+ void progress( int percentage );
+
+ void finished();
+}
+
Added: avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/SwingInstaller.java
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/SwingInstaller.java Thu Sep 16 10:35:59 2004
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2004 Apache Software Foundation
+ * 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.apache.metro.installer.magic;
+
+import java.awt.Container;
+import java.awt.Dimension;
+
+import java.io.File;
+
+import javax.swing.BoxLayout;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.JTextArea;
+
+public class SwingInstaller
+{
+ private JFrame m_ProgressWindow;
+ private JProgressBar m_ProgressBar;
+ private JTextArea m_TextArea;
+
+ public SwingInstaller()
+ {
+ m_ProgressWindow = new JFrame();
+ Container pane = m_ProgressWindow.getContentPane();
+ final BoxLayout layout = new BoxLayout( pane, BoxLayout.X_AXIS );
+ pane.setLayout( layout );
+
+ JPanel leadColumn = new JPanel();
+ leadColumn.setMinimumSize( new Dimension( 10, 10 ) );
+ pane.add( leadColumn );
+
+ JPanel column = new JPanel();
+ final BoxLayout layout2 = new BoxLayout( column, BoxLayout.Y_AXIS );
+ column.setLayout( layout2 );
+ pane.add( column );
+
+ JPanel trailColumn = new JPanel();
+ trailColumn.setMinimumSize( new Dimension( 10, 10 ) );
+ pane.add( trailColumn );
+
+ JPanel leadRow = new JPanel();
+ leadRow.setMinimumSize( new Dimension( 10, 10 ) );
+ column.add( leadRow );
+
+ final JLabel label = new JLabel( "Installing Magic - The new age of build systems." );
+ column.add( label );
+
+ m_ProgressWindow.setTitle( "Magic Installer" );
+ final JPanel spring1 = new JPanel();
+ setSizes( spring1, 0, 10, 100 );
+ column.add( spring1 );
+
+ m_ProgressBar = createProgressBar();
+ column.add( m_ProgressBar );
+ final JPanel spring2 = new JPanel();
+ setSizes( spring2, 0, 10, 100 );
+ column.add( spring2 );
+
+ final JPanel spring3 = new JPanel();
+ setSizes( spring3, 0, 10, 100 );
+ column.add( spring3 );
+
+ m_TextArea = createTextArea();
+ column.add( m_TextArea );
+ final JPanel spring4 = new JPanel();
+ setSizes( spring4, 0, 10, 100 );
+ column.add( spring4 );
+
+ m_ProgressWindow.pack();
+ m_ProgressWindow.setVisible( true );
+ }
+
+ public void start()
+ throws Exception
+ {
+ File userHome = new File( System.getProperty( "user.home" ) );
+ File magicHome = new File( userHome, ".magic" );
+ File antLibDir = new File( userHome, ".ant/lib" );
+
+ ProgressIndicator indicator = new SwingProgress();
+ Worker w = new Worker( magicHome, antLibDir );
+ w.start( indicator );
+ }
+
+ private void setSizes( JPanel panel, int min, int pref, int max )
+ {
+ Dimension minDim = new Dimension( min, min );
+ panel.setMinimumSize( minDim );
+ Dimension prefDim = new Dimension( pref, pref );
+ panel.setPreferredSize( prefDim );
+ Dimension maxDim = new Dimension( max, max );
+ panel.setMaximumSize( maxDim );
+ }
+
+ private JProgressBar createProgressBar()
+ {
+ final Dimension minDim = new Dimension( 50, 10 );
+ final Dimension prefDim = new Dimension( 300, 25 );
+ final Dimension maxDim = new Dimension( 1200, 50 );
+ JProgressBar bar = new JProgressBar();
+ bar.setStringPainted( true );
+ bar.setMinimumSize( minDim );
+ bar.setPreferredSize( prefDim );
+ bar.setMaximumSize( maxDim );
+ bar.setMinimum( 0 );
+ bar.setMaximum( 100 );
+ return bar;
+ }
+
+ private JTextArea createTextArea()
+ {
+ final Dimension minDim = new Dimension( 50, 50 );
+ final Dimension prefDim = new Dimension( 300, 300 );
+ final Dimension maxDim = new Dimension( 1200, 1000 );
+ JTextArea area = new JTextArea();
+ area.setMinimumSize( minDim );
+ area.setPreferredSize( prefDim );
+ area.setMaximumSize( maxDim );
+ return area;
+ }
+
+ public class SwingProgress
+ implements ProgressIndicator
+ {
+ public void message( String message )
+ {
+ m_TextArea.append( message );
+ m_TextArea.append( "\n" );
+ }
+
+ public void start()
+ {
+ }
+
+ public void progress( int percentage )
+ {
+ m_ProgressBar.setValue( percentage );
+ m_ProgressBar.setString( percentage + "%" );
+ }
+
+ public void finished()
+ {
+ }
+ }
+}
+
+
Added: avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/Worker.java
==============================================================================
--- (empty file)
+++ avalon/trunk/tools/magic-installer/src/main/org/apache/metro/installer/magic/Worker.java Thu Sep 16 10:35:59 2004
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2004 Apache Software Foundation
+ * 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.apache.metro.installer.magic;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import java.net.URL;
+import java.net.URLConnection;
+
+import java.util.Enumeration;
+
+import java.util.jar.JarFile;
+import java.util.jar.JarEntry;
+
+public class Worker
+{
+ private static final int BUFFER_SIZE = 10000;
+
+ private File m_MagicHome;
+ private File m_AntLibDir;
+
+ public Worker( File magicHome, File antLib )
+ {
+ m_MagicHome = magicHome;
+ m_AntLibDir = antLib;
+ }
+
+ public void start( ProgressIndicator indicator )
+ throws Exception
+ {
+ /* Not sure what to do with these yet.
+ File md5File = download( "http://www.dpml.net/avalon/tools/bars/avalon-tools-magic.bar.md5" );
+ File ascFile = download( "http://www.dpml.net/avalon/tools/bars/avalon-tools-magic.bar.asc" );
+ */
+
+ String url = "http://www.dpml.net/avalon/tools/bars/avalon-tools-magic.bar";
+ File barFile = download( url, indicator );
+ unjar( barFile, m_MagicHome, indicator );
+
+ File toolsJar = new File( m_MagicHome, "jars/avalon-tools-magic.jar" );
+
+ copy( toolsJar, m_AntLibDir, indicator );
+ indicator.message( "Cleaning up." );
+ File jarsDir = toolsJar.getParentFile();
+ toolsJar.delete();
+ jarsDir.delete();
+ }
+
+ private void unjar( File barFile, File toDir, ProgressIndicator indicator )
+ throws IOException
+ {
+ indicator.message( "Unzipping " + barFile );
+ indicator.start();
+ JarFile jar = new JarFile( barFile );
+ Enumeration entries = jar.entries();
+ while( entries.hasMoreElements() )
+ {
+ JarEntry entry = (JarEntry) entries.nextElement();
+ String name = entry.getName();
+ InputStream in = jar.getInputStream( entry );
+ File file = new File( toDir, name );
+ FileOutputStream out = new FileOutputStream( file );
+ long size = entry.getSize();
+ copy( in, out, indicator, size );
+ in.close();
+ out.close();
+ }
+ indicator.finished();
+ }
+
+ private File download( String url, ProgressIndicator indicator )
+ throws IOException
+ {
+ URL download = new URL( url );
+ indicator.message( "Connecting to " + download.getHost() );
+
+ URLConnection conn = download.openConnection();
+ conn.connect();
+ int size = conn.getContentLength();
+
+ indicator.message( "Downloading " + url );
+ indicator.start();
+ InputStream in = conn.getInputStream();
+
+ File tmp = File.createTempFile( "magic", null );
+ tmp.deleteOnExit();
+
+ FileOutputStream out = new FileOutputStream( tmp );
+
+ copy( in, out, indicator, size );
+ in.close();
+ out.close();
+ indicator.finished();
+ return tmp;
+ }
+
+
+ private void copy( InputStream from, OutputStream to,
+ ProgressIndicator indicator, long size )
+ throws IOException
+ {
+ BufferedOutputStream out = new BufferedOutputStream( to );
+ BufferedInputStream in = new BufferedInputStream( from, BUFFER_SIZE );
+ int bytesRead = 0;
+ int counter = 0;
+ do
+ {
+ byte[] data = new byte[ BUFFER_SIZE ];
+ bytesRead = in.read( data, 0, BUFFER_SIZE );
+ counter = counter + bytesRead;
+ if( size != 0 )
+ indicator.progress( (int) ( ( counter * 100 ) / size ) );
+ if( bytesRead != -1 )
+ out.write( data, 0, bytesRead );
+ } while( bytesRead != -1 );
+ out.flush();
+ }
+
+ private void copy( File file, File toDir, ProgressIndicator indicator )
+ throws IOException
+ {
+ indicator.message( "Copying " + file + " to " + file );
+ indicator.start();
+ toDir.mkdirs();
+ String name = file.getName();
+ File destFile = new File( toDir, name );
+
+ FileInputStream in = new FileInputStream( file );
+ FileOutputStream out = new FileOutputStream( destFile );
+
+ long size = file.length();
+ copy( in, out, indicator, size );
+
+ in.close();
+ out.close();
+ indicator.finished();
+ }
+}