[Home] Restricted access for guests. The link to Java source code is disabled
Java source code of 'jhplot.utils.Util'
/*
* Util in org.jpws.front.util
* file: Util.java
*
* Project Jpws-Front
* @author Wolfgang Keller
* Created 28.09.2004
* Version
*
* Copyright (c) 2005 by Wolfgang Keller, Munich, Germany
*
This program is not freeware software but copyright protected to the author(s)
stated above. However, you can use, redistribute and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation,
version 2 of the License.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place - Suite 330, Boston, MA 02111-1307, USA, or go to
http://www.gnu.org/copyleft/gpl.html.
*/
package jhplot.utils;
import javax.swing.*;
import java.awt.*;
import java.util.BitSet;
import java.util.zip.CRC32;
import java.io.*;
import java.net.*;
/**
* Various useful functions of general purpose.
*
* @author Wolfgang Keller / sergei chekanov
*/
public final class Util
{
/**
*
*/
private Util()
{
super();
// TODO Auto-generated constructor stub
}
/**
* Calculates the X and Y coordinates that a child component should have to be centered
* within its parent. This method does not try to constrain the calculation so that
* the point remains wholly onscreen.
*
* @param rec the bounding rectangle of the parent.
* @param dim the dimensions of the child.
*
* @return the X and Y coordinates the child should have.
*/
public static Point centreWithin( Rectangle rec, Dimension dim )
{
Point pos;
pos = new Point();
pos.x = rec.x + ((rec.width - dim.width) >> 1);
pos.y = rec.y + ((rec.height - dim.height) >> 1);
return pos;
}
// put right
public static Point rightWithin( Rectangle rec, Dimension dim )
{
Point pos;
pos = new Point();
// pos.x = rec.x + ((rec.width - dim.width) >> 1);
// pos.y = rec.y + ((rec.height - dim.height) >> 1);
pos.x = rec.x + rec.width;
pos.y = rec.y;
return pos;
}
// put below
public static Point belowWithin( Rectangle rec, Dimension dim )
{
Point pos;
pos = new Point();
// pos.x = rec.x + ((rec.width - dim.width) >> 1);
// pos.y = rec.y + ((rec.height - dim.height) >> 1);
pos.x = rec.x;
pos.y = rec.y+rec.height;
return pos;
}
/**
* Centres the child component within its parent.
*
* @param parent the parent component.
* @param child the child component.
*/
public static void centreWithin( Component parent, Component child )
{
Point p;
Dimension screen, win;
int diff;
screen = Toolkit.getDefaultToolkit().getScreenSize();
win = child.getSize();
p = centreWithin( parent.getBounds(), win );
if ( (diff = screen.width - p.x - win.width) < 0 )
p.x += diff;
if ( (diff = screen.height - p.y - win.height) < 0 )
p.y += diff;
p.x = Math.max( 0, p.x );
p.y = Math.max( 0, p.y );
child.setLocation( p );
}
/**
* Puts to the right
*
* @param parent the parent component.
* @param child the child component.
*/
// put right
public static void rightWithin( Component parent, Component child )
{
Point p;
Dimension screen, win;
int diff;
screen = Toolkit.getDefaultToolkit().getScreenSize();
win = child.getSize();
p = rightWithin( parent.getBounds(), win );
if ( (diff = screen.width - p.x - win.width) < 0 )
p.x += diff;
if ( (diff = screen.height - p.y - win.height) < 0 )
p.y += diff;
p.x = Math.max( 0, p.x );
p.y = Math.max( 0, p.y );
child.setLocation( p );
}
// put below
public static void belowWithin( Component parent, Component child )
{
Point p;
Dimension screen, win;
int diff;
screen = Toolkit.getDefaultToolkit().getScreenSize();
win = child.getSize();
p = belowWithin( parent.getBounds(), win );
if ( (diff = screen.width - p.x - win.width) < 0 )
p.x += diff;
if ( (diff = screen.height - p.y - win.height) < 0 )
p.y += diff;
p.x = Math.max( 0, p.x );
p.y = Math.max( 0, p.y );
child.setLocation( p );
}
public static String fileNameOfPath ( String path )
{
File f;
if ( path == null )
return "";
f = new File( path );
return f.getName();
}
public static String pathNameOfPath ( String path )
{
File f;
if ( path == null )
return "";
f = new File( path );
return f.getParent();
}
/** Renders a string based on text where any occurence of
* token is replaced by substitute.
* @return String
*/
public static String substituteText ( String text, String token, String substitute )
{
int index;
if ( token == null || substitute == null || (index=text.indexOf( token )) < 0 )
return text;
while ( index > -1 )
{
text = text.substring( 0, index ) + substitute +
text.substring( index+token.length() );
index = text.indexOf( token );
}
return text;
} // substituteText
/** Renders a string based on text where any occurence of
* token is replaced by substitute.
* @return String
*/
public static String substituteTextS ( String text, String token,
String substitute )
{
int index;
if ( token == null || substitute == null || (index=text.indexOf( token )) < 0 )
return text;
if ( index > -1 )
{
text = text.substring( 0, index ) + substitute +
text.substring( index+token.length() );
}
return text;
} // substituteText
/** Substitutes conflicting characters in text with html
* masked expressions. The returned string is displayable in html interpreting
* components.
*
* @param text
* @return
*/
public static String htmlEncoded ( String text )
{
StringBuffer b;
int i, len;
char c;
len = text.length();
b = new StringBuffer( len * 3 );
for ( i = 0; i < len; i++ )
{
c = text.charAt( i );
switch ( c )
{
case '<': b.append( "<" );
break;
case '>': b.append( ">" );
break;
case '&': b.append( "&" );
break;
case '"': b.append( """ );
break;
default: b.append( c );
}
}
return b.toString();
}
/** Copies the contents of any disk file to a specified output file. If the
* output file is a relative path, it is made absolute against the directory
* of the input file. The output file will be overwritten if it exist.
* A CRC32 check is performed to compare source and copy after the copy process
* and if results negative a StreamCorruptedException is thrown.
* Function reports errors to System.err.
* @param inputFile a File object
* @param outputFile a File object
* @throws java.io.IOException if the function could not be completed
* because of an IO or CRC check error
*/
public static void copyFile( File inputFile, File outputFile )
throws java.io.IOException
{
File parent;
FileInputStream in = null;
FileOutputStream out = null;
CRC32 crcSum;
int writeCrc;
// long time;
// control parameter
if ( inputFile == null | outputFile == null )
throw new IllegalArgumentException( "null pointer" );
if ( inputFile.equals( outputFile ) )
throw new IllegalArgumentException( "illegal self reference" );
byte[] buffer = new byte[2048];
int len;
try {
// make output file absolute (if not already)
parent=inputFile.getAbsoluteFile().getParentFile();
if ( !outputFile.isAbsolute() )
outputFile = new File( parent, outputFile.getPath() );
// make sure the directory for the output file exists
ensureFilePath( outputFile, parent );
// create file streams
in = new FileInputStream(inputFile);
out = new FileOutputStream(outputFile);
// time = inputFile.lastModified();
crcSum = new CRC32();
while ((len = in.read(buffer)) != -1)
{
out.write(buffer, 0, len);
crcSum.update( buffer, 0, len );
}
in.close();
out.close();
writeCrc = (int)crcSum.getValue();
// outputFile.setLastModified( time );
// control output CRC
in = new FileInputStream( outputFile );
crcSum.reset();
while ((len = in.read(buffer)) != -1)
crcSum.update( buffer, 0, len );
if ( writeCrc != (int)crcSum.getValue() )
throw new StreamCorruptedException( "bad copy CRC" );
}
catch (IOException e)
{
System.err.println(
"*** error during file copy: " + outputFile.getAbsolutePath());
System.err.println(e);
throw e;
}
finally
{
if ( in != null )
in.close();
if ( out != null )
out.close();
}
} // copyFile
/** Ensures the existence of the directory which may be part of the path
* specification of parameter file. If the specified file is a
* relative path, it is made absolute against defaultDir. If
* defaultDir is null the System property "user.dir" is
* assumed as default directory.
* @return true if and only if the parent directory of the specified file
* exists after this function terminates
*/
public static boolean ensureFilePath ( File file, File defaultDir )
{
File parent;
if ( (parent=file.getParentFile()) != null )
return ensureDirectory( parent, defaultDir );
return true;
} // ensureFilePath
/** Ensures the existence of the directory specified by the parameter. If the
* directory does not exist, an attempt is performed to create it including all
* necessary parent directories that may be implied by the specification.
* @param dir File specifying the intended directory; if the specified
* path is a relative path, it is made absolute against defaultDir.
* If defaultDir is null the System directory "user.dir" is
* assumed as default.
* @return true if and only if the specified file exists and
* is a directory after this function terminates
*/
public static boolean ensureDirectory ( File dir, File defaultDir )
{
boolean success = true;
if ( dir == null )
throw new IllegalArgumentException( "dir = null" );
if ( !dir.isAbsolute() )
dir = new File( defaultDir, dir.getPath() );
if ( !dir.isDirectory() )
{
success = !dir.isFile() && dir.mkdirs();
if ( !success )
System.err.println("failed while trying to create directory: "+ dir.toString() );
}
return success;
} // ensureDirectory
public static int textVariance ( char[] ca )
{
BitSet set = new BitSet();
int i;
for ( i = 0; i < ca.length; i++ )
set.set( ca[i] );
return set.cardinality();
}
/**
* Deletes all files and subdirectories under dir.
* Returns true if all deletions were successful.
* If a deletion fails, the method stops attempting to delete and returns false.
*/
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i=0; i 0) {
out.write(buf, 0, len);
}
out.close();
dest.setLastModified(connection.getLastModified());
in.close();
return true;
} catch (Exception e) {
try {
in.close();
out.close();
} catch (Exception ex) {
System.err.println(ex.toString());
}
// dest.delete();
throw e;
}
}
}