diff options
Diffstat (limited to 'libjava/classpath/gnu/javax')
63 files changed, 843 insertions, 325 deletions
diff --git a/libjava/classpath/gnu/javax/crypto/jce/DiffieHellmanImpl.java b/libjava/classpath/gnu/javax/crypto/jce/DiffieHellmanImpl.java index 4f4d5e47908..6a65437d644 100644 --- a/libjava/classpath/gnu/javax/crypto/jce/DiffieHellmanImpl.java +++ b/libjava/classpath/gnu/javax/crypto/jce/DiffieHellmanImpl.java @@ -94,8 +94,7 @@ public final class DiffieHellmanImpl DHPublicKey pub = (DHPublicKey) incoming; DHParameterSpec s1 = key.getParams(); DHParameterSpec s2 = pub.getParams(); - if (! s1.getG().equals(s2.getG()) || ! s1.getP().equals(s2.getP()) - || s1.getL() != s2.getL()) + if (! s1.getG().equals(s2.getG()) || ! s1.getP().equals(s2.getP())) throw new InvalidKeyException("Incompatible key"); if (! lastPhase) throw new IllegalArgumentException( diff --git a/libjava/classpath/gnu/javax/crypto/key/dh/RFC2631.java b/libjava/classpath/gnu/javax/crypto/key/dh/RFC2631.java index 673e44864b5..a814d2c0bbf 100644 --- a/libjava/classpath/gnu/javax/crypto/key/dh/RFC2631.java +++ b/libjava/classpath/gnu/javax/crypto/key/dh/RFC2631.java @@ -136,7 +136,7 @@ public class RFC2631 } // 8. Let counter = 0 counter = 0; - step9: while (true) + while (true) { // 9. Set R = seed + 2*m' + (L' * counter) R = SEED diff --git a/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF16.java b/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF16.java index 702c93ab3ca..397b857aa37 100644 --- a/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF16.java +++ b/libjava/classpath/gnu/javax/imageio/bmp/DecodeBF16.java @@ -39,8 +39,6 @@ package gnu.javax.imageio.bmp; import java.io.IOException; import javax.imageio.stream.ImageInputStream; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.DirectColorModel; diff --git a/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB32.java b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB32.java index d653bbf9ffd..4aa1cd5d2fb 100644 --- a/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB32.java +++ b/libjava/classpath/gnu/javax/imageio/bmp/EncodeRGB32.java @@ -38,7 +38,6 @@ exception statement from your version. */ package gnu.javax.imageio.bmp; -import java.awt.Dimension; import java.awt.image.BufferedImage; import java.awt.image.PixelGrabber; import java.io.IOException; diff --git a/libjava/classpath/gnu/javax/imageio/gif/GIFFile.java b/libjava/classpath/gnu/javax/imageio/gif/GIFFile.java index a11a8c0c6f5..ec0a3103d30 100644 --- a/libjava/classpath/gnu/javax/imageio/gif/GIFFile.java +++ b/libjava/classpath/gnu/javax/imageio/gif/GIFFile.java @@ -276,7 +276,7 @@ public class GIFFile * * @param in - the stream (reads 6 bytes, does not close or reset). * @return true if the signature is a valid GIF signature. - * @throws an IOException if the signature could not be read. + * @throws IOException if the signature could not be read. */ public static boolean readSignature( InputStream in ) throws IOException { diff --git a/libjava/classpath/gnu/javax/imageio/jpeg/JPEGComponent.java b/libjava/classpath/gnu/javax/imageio/jpeg/JPEGComponent.java index d5799fd412b..d07bb34e939 100644 --- a/libjava/classpath/gnu/javax/imageio/jpeg/JPEGComponent.java +++ b/libjava/classpath/gnu/javax/imageio/jpeg/JPEGComponent.java @@ -336,7 +336,7 @@ public class JPEGComponent { k += r; r = (int) JPEGStream.readBits(s); - s = (int) HuffmanTable.extend(r, s); + s = HuffmanTable.extend(r, s); zz[k] = s; } else diff --git a/libjava/classpath/gnu/javax/imageio/jpeg/JPEGDecoder.java b/libjava/classpath/gnu/javax/imageio/jpeg/JPEGDecoder.java index 3610ebe874f..0f2a3f2b949 100644 --- a/libjava/classpath/gnu/javax/imageio/jpeg/JPEGDecoder.java +++ b/libjava/classpath/gnu/javax/imageio/jpeg/JPEGDecoder.java @@ -40,16 +40,12 @@ package gnu.javax.imageio.jpeg; import java.io.IOException; import java.nio.ByteOrder; -import javax.imageio.*; import javax.imageio.plugins.jpeg.JPEGHuffmanTable; import javax.imageio.plugins.jpeg.JPEGQTable; -import javax.imageio.spi.*; -import javax.imageio.metadata.*; import javax.imageio.stream.ImageInputStream; import java.util.ArrayList; import java.util.Hashtable; -import java.util.Iterator; import java.awt.Point; import java.awt.Transparency; import java.awt.color.ColorSpace; @@ -391,7 +387,7 @@ public class JPEGDecoder // read in how much they need for (int compIndex = 0; compIndex < numberOfComponents; compIndex++) { - JPEGComponent comp = (JPEGComponent) frame.components.getComponentByID(componentSelector[compIndex]); + JPEGComponent comp = frame.components.getComponentByID(componentSelector[compIndex]); comp.readComponentMCU(jpegStream); } mcuIndex++; @@ -420,7 +416,7 @@ public class JPEGDecoder { for (int compIndex = 0; compIndex < numberOfComponents; compIndex++) { - JPEGComponent comp = (JPEGComponent) frame.components.getComponentByID(componentSelector[compIndex]); + JPEGComponent comp = frame.components.getComponentByID(componentSelector[compIndex]); if (compIndex > 1) comp.padMCU(mcuTotalIndex, resetInterval - mcuIndex); comp.resetInterval(); @@ -485,8 +481,7 @@ public class JPEGDecoder // Unencode the data. for (int i = 0; i < frame.getComponentCount(); i++) { - JPEGComponent comp = - (JPEGComponent) frame.components.get(i); + JPEGComponent comp = frame.components.get(i); comp.setQuantizationTable(qTables[comp.quant_id].getTable()); comp.quantitizeData(); comp.idctData(myDCT); @@ -494,7 +489,7 @@ public class JPEGDecoder // Scale the image and write the data to the raster. for (int i = 0; i < frame.getComponentCount(); i++) { - JPEGComponent comp = (JPEGComponent) frame.components.get(i); + JPEGComponent comp = frame.components.get(i); comp.scaleByFactors(); comp.writeData(raster, i); // Ensure garbage collection. diff --git a/libjava/classpath/gnu/javax/imageio/jpeg/JPEGException.java b/libjava/classpath/gnu/javax/imageio/jpeg/JPEGException.java index b684069ccb6..a2c06e27e04 100644 --- a/libjava/classpath/gnu/javax/imageio/jpeg/JPEGException.java +++ b/libjava/classpath/gnu/javax/imageio/jpeg/JPEGException.java @@ -37,14 +37,7 @@ exception statement from your version. */ package gnu.javax.imageio.jpeg; -// FIXME: change to IIOException -import java.io.IOException; import javax.imageio.*; -import javax.imageio.spi.*; -import javax.imageio.metadata.*; -import javax.imageio.stream.ImageInputStream; -import java.util.Iterator; -import java.awt.image.BufferedImage; public class JPEGException extends IIOException { diff --git a/libjava/classpath/gnu/javax/imageio/jpeg/JPEGFrame.java b/libjava/classpath/gnu/javax/imageio/jpeg/JPEGFrame.java index 9b958f98f2c..35aed728a4d 100644 --- a/libjava/classpath/gnu/javax/imageio/jpeg/JPEGFrame.java +++ b/libjava/classpath/gnu/javax/imageio/jpeg/JPEGFrame.java @@ -101,7 +101,7 @@ public class JPEGFrame public void setHuffmanTables(byte componentID, JPEGHuffmanTable ACTable, JPEGHuffmanTable DCTable) { - JPEGComponent comp = (JPEGComponent)components.getComponentByID(componentID); + JPEGComponent comp = components.getComponentByID(componentID); comp.setACTable(ACTable); comp.setDCTable(DCTable); } diff --git a/libjava/classpath/gnu/javax/imageio/jpeg/JPEGImageInputStream.java b/libjava/classpath/gnu/javax/imageio/jpeg/JPEGImageInputStream.java index 4ae909baf15..29a12f346cf 100644 --- a/libjava/classpath/gnu/javax/imageio/jpeg/JPEGImageInputStream.java +++ b/libjava/classpath/gnu/javax/imageio/jpeg/JPEGImageInputStream.java @@ -37,17 +37,10 @@ exception statement from your version. */ package gnu.javax.imageio.jpeg; -import java.io.EOFException; import java.io.IOException; -import javax.imageio.*; -import javax.imageio.spi.*; -import javax.imageio.metadata.*; import javax.imageio.stream.ImageInputStream; import javax.imageio.stream.ImageInputStreamImpl; -import java.util.Iterator; -import java.awt.image.BufferedImage; - public class JPEGImageInputStream extends ImageInputStreamImpl { diff --git a/libjava/classpath/gnu/javax/imageio/png/PNGChunk.java b/libjava/classpath/gnu/javax/imageio/png/PNGChunk.java index 6b53810c89d..8efbeea7259 100644 --- a/libjava/classpath/gnu/javax/imageio/png/PNGChunk.java +++ b/libjava/classpath/gnu/javax/imageio/png/PNGChunk.java @@ -40,7 +40,6 @@ package gnu.javax.imageio.png; import java.io.InputStream; import java.io.OutputStream; import java.io.IOException; -import java.io.UnsupportedEncodingException; /** * Class to load and validate a generic PNG chunk. diff --git a/libjava/classpath/gnu/javax/imageio/png/PNGDecoder.java b/libjava/classpath/gnu/javax/imageio/png/PNGDecoder.java index 20fc32ce371..652f59d35b5 100644 --- a/libjava/classpath/gnu/javax/imageio/png/PNGDecoder.java +++ b/libjava/classpath/gnu/javax/imageio/png/PNGDecoder.java @@ -140,7 +140,7 @@ public class PNGDecoder /** * Parse the appropriate color type and create an AWT raster for it. - * @param raster - the file header. + * @param header - the file header. */ public WritableRaster getRaster( PNGHeader header ) { diff --git a/libjava/classpath/gnu/javax/imageio/png/PNGEncoder.java b/libjava/classpath/gnu/javax/imageio/png/PNGEncoder.java index c0a30a7baef..b8441c4e3f0 100644 --- a/libjava/classpath/gnu/javax/imageio/png/PNGEncoder.java +++ b/libjava/classpath/gnu/javax/imageio/png/PNGEncoder.java @@ -40,7 +40,6 @@ package gnu.javax.imageio.png; import java.util.Vector; import java.util.zip.Deflater; import java.awt.color.ColorSpace; -import java.awt.color.ICC_Profile; import java.awt.color.ICC_ColorSpace; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; @@ -48,7 +47,6 @@ import java.awt.image.DataBuffer; import java.awt.image.DataBufferByte; import java.awt.image.DataBufferUShort; import java.awt.image.IndexColorModel; -import java.awt.image.Raster; import java.awt.image.WritableRaster; public class PNGEncoder diff --git a/libjava/classpath/gnu/javax/imageio/png/PNGFile.java b/libjava/classpath/gnu/javax/imageio/png/PNGFile.java index cc0ca297fcb..96e8f9ce78f 100644 --- a/libjava/classpath/gnu/javax/imageio/png/PNGFile.java +++ b/libjava/classpath/gnu/javax/imageio/png/PNGFile.java @@ -44,7 +44,6 @@ import java.util.Vector; import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.awt.image.ColorModel; -import java.awt.image.IndexColorModel; import java.awt.color.ColorSpace; public class PNGFile diff --git a/libjava/classpath/gnu/javax/imageio/png/PNGGamma.java b/libjava/classpath/gnu/javax/imageio/png/PNGGamma.java index af777d9b4f6..d9cacea4609 100644 --- a/libjava/classpath/gnu/javax/imageio/png/PNGGamma.java +++ b/libjava/classpath/gnu/javax/imageio/png/PNGGamma.java @@ -37,10 +37,6 @@ exception statement from your version. */ package gnu.javax.imageio.png; -import java.awt.color.ICC_ProfileGray; -import java.awt.color.ICC_ProfileRGB; -import java.awt.color.ICC_Profile; -import java.awt.color.ICC_ColorSpace; import java.awt.color.ColorSpace; /** diff --git a/libjava/classpath/gnu/javax/management/Server.java b/libjava/classpath/gnu/javax/management/Server.java index 616854e95bd..8e8d826c00f 100644 --- a/libjava/classpath/gnu/javax/management/Server.java +++ b/libjava/classpath/gnu/javax/management/Server.java @@ -169,7 +169,7 @@ public class Server * Constructs a new management server using the specified * default domain, delegate bean and outer server. * - * @param domain the default domain to use for beans constructed + * @param defaultDomain the default domain to use for beans constructed * with no specified domain. * @param outer an {@link javax.management.MBeanServer} to pass * to beans implementing the {@link MBeanRegistration} @@ -229,8 +229,8 @@ public class Server if (name != null) { Object bean = getBean(name); - Method method = bean.getClass().getMethod("getMBeanInfo", null); - info = (MBeanInfo) method.invoke(bean, null); + Method method = bean.getClass().getMethod("getMBeanInfo"); + info = (MBeanInfo) method.invoke(bean); } sm.checkPermission(new MBeanPermission((info == null) ? null : info.getClassName(), @@ -1031,13 +1031,20 @@ public class Server checkSecurity(name, null, "getMBeanInfo"); try { - Method method = bean.getClass().getMethod("getMBeanInfo", null); - return (MBeanInfo) method.invoke(bean, null); + Method method = bean.getClass().getMethod("getMBeanInfo"); + return (MBeanInfo) method.invoke(bean); } catch (NoSuchMethodException e) { - throw new IntrospectionException("The getMBeanInfo method " + - "could not be found."); + try + { + return new StandardMBean(bean, null).getMBeanInfo(); + } + catch (NotCompliantMBeanException ex) + { + throw new IntrospectionException("An error occurred in executing " + + "getMBeanInfo on the bean: " + ex + "."); + } } catch (IllegalAccessException e) { diff --git a/libjava/classpath/gnu/javax/management/Translator.java b/libjava/classpath/gnu/javax/management/Translator.java index 69191d43f86..4ede3743088 100644 --- a/libjava/classpath/gnu/javax/management/Translator.java +++ b/libjava/classpath/gnu/javax/management/Translator.java @@ -39,11 +39,15 @@ package gnu.javax.management; import java.lang.reflect.Array; import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.ParameterizedType; import java.lang.reflect.Proxy; import java.lang.reflect.Type; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -92,7 +96,7 @@ public final class Translator Type[] gtypes = method.getGenericParameterTypes(); Object[] otypes = new Object[jtypes.length]; for (int a = 0; a < jtypes.length; ++a) - otypes[a] = fromJava(jtypes[a], (Class<?>) gtypes[a]); + otypes[a] = fromJava(jtypes[a], gtypes[a]); return otypes; } @@ -131,11 +135,10 @@ public final class Translator if (jtype instanceof List || jtype instanceof Set || jtype instanceof SortedSet) { - String elemType = tName.substring(tName.indexOf("<") + 1, - tName.indexOf(">")).trim(); if (jtype instanceof SortedSet) { - Class<?> elemClass = Class.forName(elemType); + ParameterizedType ptype = (ParameterizedType) type; + Class<?> elemClass = (Class<?>) ptype.getActualTypeArguments()[0]; if (!Comparable.class.isAssignableFrom(elemClass)) throw new IllegalArgumentException(jtype + " has a " + "non-comparable element " + @@ -144,11 +147,13 @@ public final class Translator throw new IllegalArgumentException(jtype + " does not " + "use natural ordering."); } - List elems = (List) jtype; - Object[] celems = new Object[elems.size()]; - for (int a = 0; a < elems.size(); ++a) + Collection<Object> elems = (Collection<Object>) jtype; + int numElems = elems.size(); + Object[] celems = new Object[numElems]; + Iterator<Object> i = elems.iterator(); + for (int a = 0; a < numElems; ++a) { - Object elem = elems.get(a); + Object elem = i.next(); celems[a] = fromJava(elem, elem.getClass()); } return makeArraySpecific(celems); @@ -440,33 +445,6 @@ public final class Translator SimpleType.STRING, null, names); } - try - { - c.getMethod("from", new Class[] { CompositeData.class }); - Method[] methods = c.getDeclaredMethods(); - List<String> names = new ArrayList<String>(); - List<OpenType> types = new ArrayList<OpenType>(); - for (int a = 0; a < methods.length; ++a) - { - String name = methods[a].getName(); - if (name.startsWith("get")) - { - names.add(name.substring(3)); - types.add(getTypeFromClass(methods[a].getReturnType())); - } - } - String[] fields = names.toArray(new String[names.size()]); - CompositeType ctype = new CompositeType(c.getName(), c.getName(), - fields, fields, - types.toArray(new OpenType[types.size()])); - return new OpenMBeanParameterInfoSupport("TransParam", - "Translated parameter", - ctype); - } - catch (NoSuchMethodException e) - { - /* Ignored; we expect this if this isn't a from(CompositeData) class */ - } if (c.isArray()) { int depth; @@ -478,7 +456,35 @@ public final class Translator new ArrayType(depth, ot) ); } - throw new InternalError("The type used does not have an open type translation."); + Method[] methods = c.getDeclaredMethods(); + List<String> names = new ArrayList<String>(); + List<OpenType> types = new ArrayList<OpenType>(); + for (int a = 0; a < methods.length; ++a) + { + String name = methods[a].getName(); + if (Modifier.isPublic(methods[a].getModifiers())) + { + if (name.startsWith("get")) + { + names.add(name.substring(3)); + types.add(getTypeFromClass(methods[a].getReturnType())); + } + else if (name.startsWith("is")) + { + names.add(name.substring(2)); + types.add(getTypeFromClass(methods[a].getReturnType())); + } + } + } + if (names.isEmpty()) + throw new OpenDataException("The type used does not have an open type translation."); + String[] fields = names.toArray(new String[names.size()]); + CompositeType ctype = new CompositeType(c.getName(), c.getName(), + fields, fields, + types.toArray(new OpenType[types.size()])); + return new OpenMBeanParameterInfoSupport("TransParam", + "Translated parameter", + ctype); } /** diff --git a/libjava/classpath/gnu/javax/naming/giop/ContextContinuation.java b/libjava/classpath/gnu/javax/naming/giop/ContextContinuation.java index 7d7a785fd2f..05023840ba3 100644 --- a/libjava/classpath/gnu/javax/naming/giop/ContextContinuation.java +++ b/libjava/classpath/gnu/javax/naming/giop/ContextContinuation.java @@ -129,14 +129,14 @@ public class ContextContinuation implements Context * Creates a new naming context that uses naming service, represented by the * given CORBA object. * - * @param namingService + * @param nsObject * the naming service object. It must be possible to narrow it into * the NamingContextExt. * @param props * the environment table. - * @param orb + * @param anOrb * the associated ORB. This reference is used during cleanup. - * @param the + * @param aFactory * parent factory. This reference is used during cleanup. */ public ContextContinuation(org.omg.CORBA.Object nsObject, @@ -293,7 +293,7 @@ public class ContextContinuation implements Context * context. The returned object will wrap around the newly created CORBA * subcontext * - * @param name + * @param subContext * the name of the new context being created * @return the newly created context, bound to the instance of the context on * that the method has been called @@ -336,7 +336,7 @@ public class ContextContinuation implements Context * context. The returned object will wrap around the newly created CORBA * subcontext * - * @param name + * @param subContext * the name of the new context being created * @return the newly created context, bound to the instance of the context on * that the method has been called @@ -380,7 +380,7 @@ public class ContextContinuation implements Context * action if such subcontext does not exist. The context being destroyed must * be empty. * - * @param name + * @param subContext * the name of the subcontext beig removed. * @throws ContextNotEmptyException * if the named context is not empty. @@ -396,7 +396,7 @@ public class ContextContinuation implements Context * action if such subcontext does not exist. The context being destroyed must * be empty. * - * @param name + * @param subContext * the name of the subcontext beig removed. * @throws ContextNotEmptyException * if the named context is not empty. @@ -868,9 +868,9 @@ public class ContextContinuation implements Context * and value of the new property must not be null. If the property is already * defined, is current value is replaced by the propVal. * - * @param propName + * @param key * the name of the new property - * @param propVal + * @param value * the value of the new property * @return the previous value of this property or null if the property has not * been previously defined diff --git a/libjava/classpath/gnu/javax/naming/jndi/url/rmi/ContextContinuation.java b/libjava/classpath/gnu/javax/naming/jndi/url/rmi/ContextContinuation.java index de79b93c3dc..ee8c7791419 100644 --- a/libjava/classpath/gnu/javax/naming/jndi/url/rmi/ContextContinuation.java +++ b/libjava/classpath/gnu/javax/naming/jndi/url/rmi/ContextContinuation.java @@ -97,9 +97,9 @@ public class ContextContinuation implements Context * the registry. The new registry will be lazily instantiated on the first * call. * - * @param propName + * @param key * the name of the new property - * @param propVal + * @param value * the value of the new property * @return the previous value of this property or null if the property has not * been previously defined @@ -426,7 +426,7 @@ public class ContextContinuation implements Context * @param name * the object name (.toString()) is used to convert into string * representation. - * @param the + * @param obj * object (must be an instance of Remote). */ public void rebind(Name name, Object obj) throws NamingException @@ -439,7 +439,7 @@ public class ContextContinuation implements Context * * @param name * the object name. - * @param the + * @param obj * object (must be an instance of Remote). */ public void rebind(String name, Object obj) throws NamingException diff --git a/libjava/classpath/gnu/javax/net/ssl/SSLRecordHandler.java b/libjava/classpath/gnu/javax/net/ssl/SSLRecordHandler.java index 3147415fe36..3ce56eab5fe 100644 --- a/libjava/classpath/gnu/javax/net/ssl/SSLRecordHandler.java +++ b/libjava/classpath/gnu/javax/net/ssl/SSLRecordHandler.java @@ -39,7 +39,6 @@ exception statement from your version. */ package gnu.javax.net.ssl; import java.nio.ByteBuffer; -import javax.net.ssl.SSLEngineResult; import javax.net.ssl.SSLException; public abstract class SSLRecordHandler diff --git a/libjava/classpath/gnu/javax/net/ssl/StaticTrustAnchors.java b/libjava/classpath/gnu/javax/net/ssl/StaticTrustAnchors.java index 0c2c3cca8a8..480f1c754b1 100644 --- a/libjava/classpath/gnu/javax/net/ssl/StaticTrustAnchors.java +++ b/libjava/classpath/gnu/javax/net/ssl/StaticTrustAnchors.java @@ -39,8 +39,6 @@ exception statement from your version. */ package gnu.javax.net.ssl; import java.io.ByteArrayInputStream; -import java.io.InputStream; - import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/CertificateRequestBuilder.java b/libjava/classpath/gnu/javax/net/ssl/provider/CertificateRequestBuilder.java index 9beab473ca6..8c059854e4a 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/CertificateRequestBuilder.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/CertificateRequestBuilder.java @@ -38,8 +38,6 @@ exception statement from your version. */ package gnu.javax.net.ssl.provider; -import static gnu.javax.net.ssl.provider.CertificateRequest.ClientCertificateType; - import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/ClientHandshake.java b/libjava/classpath/gnu/javax/net/ssl/provider/ClientHandshake.java index a8780084508..fdbf262122b 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/ClientHandshake.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/ClientHandshake.java @@ -56,7 +56,6 @@ import java.nio.ByteBuffer; import java.security.AccessController; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; -import java.security.KeyManagementException; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.MessageDigest; @@ -65,7 +64,6 @@ import java.security.PrivateKey; import java.security.SignatureException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; -import java.security.interfaces.RSAPublicKey; import java.util.Arrays; import java.util.Collections; import java.util.LinkedList; @@ -77,7 +75,6 @@ import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; -import javax.crypto.SecretKey; import javax.crypto.interfaces.DHPrivateKey; import javax.crypto.interfaces.DHPublicKey; import javax.crypto.spec.DHParameterSpec; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/ClientPSKParameters.java b/libjava/classpath/gnu/javax/net/ssl/provider/ClientPSKParameters.java index 676a872f925..f08ec7f9062 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/ClientPSKParameters.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/ClientPSKParameters.java @@ -38,13 +38,9 @@ exception statement from your version. */ package gnu.javax.net.ssl.provider; -import gnu.classpath.debug.Component; -import gnu.classpath.debug.SystemLogger; - import java.io.PrintWriter; import java.io.StringWriter; import java.nio.ByteBuffer; -import java.nio.ByteOrder; import java.nio.CharBuffer; import java.nio.charset.Charset; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/ClientRSA_PSKParameters.java b/libjava/classpath/gnu/javax/net/ssl/provider/ClientRSA_PSKParameters.java index f7483a94c30..860cc731f7a 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/ClientRSA_PSKParameters.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/ClientRSA_PSKParameters.java @@ -38,13 +38,9 @@ exception statement from your version. */ package gnu.javax.net.ssl.provider; -import gnu.classpath.debug.Component; -import gnu.classpath.debug.SystemLogger; - import java.io.PrintWriter; import java.io.StringWriter; import java.nio.ByteBuffer; -import java.nio.ByteOrder; import java.nio.charset.Charset; /** diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/ContentType.java b/libjava/classpath/gnu/javax/net/ssl/provider/ContentType.java index f7165a2d769..eaebebf4b67 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/ContentType.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/ContentType.java @@ -38,10 +38,6 @@ exception statement from your version. */ package gnu.javax.net.ssl.provider; -import java.io.EOFException; -import java.io.InputStream; -import java.io.IOException; - /** * The content type enumeration, which marks packets in the record layer. * diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/EncryptedPreMasterSecret.java b/libjava/classpath/gnu/javax/net/ssl/provider/EncryptedPreMasterSecret.java index ea7439bd2c6..85769cffcf2 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/EncryptedPreMasterSecret.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/EncryptedPreMasterSecret.java @@ -38,9 +38,6 @@ exception statement from your version. */ package gnu.javax.net.ssl.provider; -import gnu.classpath.debug.Component; -import gnu.classpath.debug.SystemLogger; - import java.io.PrintWriter; import java.io.StringWriter; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/Handshake.java b/libjava/classpath/gnu/javax/net/ssl/provider/Handshake.java index 52f61424e4c..dd36f2b3fc5 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/Handshake.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/Handshake.java @@ -38,26 +38,11 @@ exception statement from your version. */ package gnu.javax.net.ssl.provider; -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.EOFException; -import java.io.InputStream; -import java.io.IOException; -import java.io.OutputStream; import java.io.PrintWriter; -import java.io.StringReader; import java.io.StringWriter; import java.nio.ByteBuffer; -import java.security.PublicKey; - -import java.util.ArrayList; -import java.util.Collections; - -import javax.net.ssl.SSLProtocolException; - /** * An SSL handshake message. SSL handshake messages have the following * form: diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/InputSecurityParameters.java b/libjava/classpath/gnu/javax/net/ssl/provider/InputSecurityParameters.java index 13a3ef814de..cf5ca6099ff 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/InputSecurityParameters.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/InputSecurityParameters.java @@ -47,11 +47,9 @@ import java.nio.BufferOverflowException; import java.nio.ByteBuffer; import java.util.Arrays; -import java.util.logging.Level; import java.util.zip.DataFormatException; import java.util.zip.Inflater; -import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.Mac; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/OutputSecurityParameters.java b/libjava/classpath/gnu/javax/net/ssl/provider/OutputSecurityParameters.java index 6da0d066741..228071a393d 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/OutputSecurityParameters.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/OutputSecurityParameters.java @@ -40,16 +40,13 @@ package gnu.javax.net.ssl.provider; import gnu.classpath.debug.Component; import gnu.classpath.debug.SystemLogger; -import gnu.java.security.util.ByteArray; import gnu.java.security.util.ByteBufferOutputStream; import java.nio.ByteBuffer; -import java.util.logging.Level; import java.util.zip.DataFormatException; import java.util.zip.Deflater; -import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.Mac; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/ProtocolVersion.java b/libjava/classpath/gnu/javax/net/ssl/provider/ProtocolVersion.java index ca62054a89c..3c3f29a21e6 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/ProtocolVersion.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/ProtocolVersion.java @@ -40,7 +40,6 @@ package gnu.javax.net.ssl.provider; import java.io.InputStream; import java.io.IOException; -import java.io.OutputStream; public final class ProtocolVersion implements Comparable<ProtocolVersion>, Constructed diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/Random.java b/libjava/classpath/gnu/javax/net/ssl/provider/Random.java index e6815930934..f89acc1f8f5 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/Random.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/Random.java @@ -38,10 +38,6 @@ exception statement from your version. */ package gnu.javax.net.ssl.provider; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringWriter; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/SRPTrustManagerFactory.java b/libjava/classpath/gnu/javax/net/ssl/provider/SRPTrustManagerFactory.java index 5822afe0596..c5422871df5 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/SRPTrustManagerFactory.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/SRPTrustManagerFactory.java @@ -44,8 +44,6 @@ import java.math.BigInteger; import java.security.InvalidAlgorithmParameterException; import java.security.KeyPair; import java.security.KeyStore; -import java.security.Security; - import java.util.HashMap; import javax.net.ssl.ManagerFactoryParameters; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/ServerDHE_PSKParameters.java b/libjava/classpath/gnu/javax/net/ssl/provider/ServerDHE_PSKParameters.java index edc3ac259cb..2d21d9d4554 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/ServerDHE_PSKParameters.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/ServerDHE_PSKParameters.java @@ -38,9 +38,6 @@ exception statement from your version. */ package gnu.javax.net.ssl.provider; -import gnu.classpath.debug.Component; -import gnu.classpath.debug.SystemLogger; - import java.io.PrintWriter; import java.io.StringWriter; import java.nio.ByteBuffer; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/ServerHandshake.java b/libjava/classpath/gnu/javax/net/ssl/provider/ServerHandshake.java index 300012a4b30..e30f04241a0 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/ServerHandshake.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/ServerHandshake.java @@ -775,7 +775,7 @@ class ServerHandshake extends AbstractHandshake // outgoing buffer. This isn't that great because we'd need to // store and copy things unnecessarily. // - // 2. Build outgoing handshake objects “virtually,” that is, store them + // 2. Build outgoing handshake objects 'virtually', that is, store them // as collections of objects, then compute the length, and then write // them to a buffer, instead of making the objects views on // ByteBuffers for both input and output. This would complicate the @@ -784,7 +784,7 @@ class ServerHandshake extends AbstractHandshake // pretty OK), and we still need to figure out how exactly to chunk // those objects across record boundaries. // - // 3. Try to build these objects on the buffer we’re given, but detect + // 3. Try to build these objects on the buffer we're given, but detect // when we run out of space in the output buffer, and split the // overflow message. This sounds like the best, but also probably // the hardest to code. @@ -1374,4 +1374,4 @@ output_loop: setupSecurityParameters(keys, false, engine, compression); } } -}
\ No newline at end of file +} diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/SessionImpl.java b/libjava/classpath/gnu/javax/net/ssl/provider/SessionImpl.java index 86dcb4915cd..6a4020117ec 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/SessionImpl.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/SessionImpl.java @@ -40,22 +40,16 @@ package gnu.javax.net.ssl.provider; import gnu.javax.crypto.key.GnuPBEKey; import gnu.javax.net.ssl.Session; -import gnu.javax.net.ssl.Session.ID; - import java.io.IOException; import java.io.Serializable; -import java.security.Certificate; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; -import java.security.cert.X509Certificate; - import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SealedObject; -import javax.crypto.spec.PBEKeySpec; import javax.net.ssl.SSLException; public class SessionImpl extends Session diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/Signature.java b/libjava/classpath/gnu/javax/net/ssl/provider/Signature.java index 8c6cfadc734..d95e181370e 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/Signature.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/Signature.java @@ -38,26 +38,11 @@ exception statement from your version. */ package gnu.javax.net.ssl.provider; -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.DataInputStream; -import java.io.InputStream; -import java.io.IOException; -import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringWriter; -import java.math.BigInteger; - import java.nio.ByteBuffer; -import java.security.PublicKey; -import java.security.interfaces.RSAKey; - -import java.util.Arrays; - -import gnu.java.security.der.*; - /** * The signature structure. * diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/SimpleSessionContext.java b/libjava/classpath/gnu/javax/net/ssl/provider/SimpleSessionContext.java index b9d0f95519d..20503d3cabe 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/SimpleSessionContext.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/SimpleSessionContext.java @@ -41,8 +41,6 @@ package gnu.javax.net.ssl.provider; import gnu.javax.net.ssl.AbstractSessionContext; import gnu.javax.net.ssl.Session; import gnu.javax.net.ssl.SessionStoreException; -import gnu.javax.net.ssl.Session.ID; - import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/TLSHMac.java b/libjava/classpath/gnu/javax/net/ssl/provider/TLSHMac.java index 18aa8f5f4c7..8bdda930b3c 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/TLSHMac.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/TLSHMac.java @@ -39,7 +39,6 @@ exception statement from your version. */ package gnu.javax.net.ssl.provider; import java.security.InvalidKeyException; -import java.util.HashMap; import java.util.Map; import gnu.java.security.hash.IMessageDigest; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/TrustedAuthorities.java b/libjava/classpath/gnu/javax/net/ssl/provider/TrustedAuthorities.java index 1e4b173595d..85e359675a7 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/TrustedAuthorities.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/TrustedAuthorities.java @@ -38,7 +38,6 @@ exception statement from your version. */ package gnu.javax.net.ssl.provider; -import gnu.java.security.x509.X500DistinguishedName; import gnu.javax.net.ssl.provider.Extension.Value; import java.io.PrintWriter; diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/UnresolvedExtensionValue.java b/libjava/classpath/gnu/javax/net/ssl/provider/UnresolvedExtensionValue.java index 2094daf9098..f54dda5bc6d 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/UnresolvedExtensionValue.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/UnresolvedExtensionValue.java @@ -40,8 +40,6 @@ package gnu.javax.net.ssl.provider; import gnu.javax.net.ssl.provider.Extension.Value; -import java.io.PrintWriter; -import java.io.StringWriter; import java.nio.ByteBuffer; public class UnresolvedExtensionValue extends Value diff --git a/libjava/classpath/gnu/javax/net/ssl/provider/X509KeyManagerFactory.java b/libjava/classpath/gnu/javax/net/ssl/provider/X509KeyManagerFactory.java index dc772886697..c3b7e5f4b8f 100644 --- a/libjava/classpath/gnu/javax/net/ssl/provider/X509KeyManagerFactory.java +++ b/libjava/classpath/gnu/javax/net/ssl/provider/X509KeyManagerFactory.java @@ -64,8 +64,6 @@ import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; import java.util.Map; import java.util.List; @@ -77,8 +75,6 @@ import javax.net.ssl.KeyManagerFactorySpi; import javax.net.ssl.ManagerFactoryParameters; import javax.net.ssl.SSLEngine; import javax.net.ssl.X509ExtendedKeyManager; -import javax.net.ssl.X509KeyManager; - import gnu.javax.net.ssl.NullManagerParameters; import gnu.javax.net.ssl.PrivateCredentials; diff --git a/libjava/classpath/gnu/javax/print/PrinterDialog.java b/libjava/classpath/gnu/javax/print/PrinterDialog.java index d7598be3e5b..54d6b87b47c 100644 --- a/libjava/classpath/gnu/javax/print/PrinterDialog.java +++ b/libjava/classpath/gnu/javax/print/PrinterDialog.java @@ -479,17 +479,17 @@ public final class PrinterDialog extends JDialog implements ActionListener */ void updateForSelectedService() { - PrinterMakeAndModel att1 = (PrinterMakeAndModel) + PrinterMakeAndModel att1 = getSelectedPrintService().getAttribute(PrinterMakeAndModel.class); typValue.setText(att1 == null ? "" : att1.getValue()); - PrinterInfo att2 = (PrinterInfo) + PrinterInfo att2 = getSelectedPrintService().getAttribute(PrinterInfo.class); infoValue.setText(att2 == null ? "" : att2.getValue()); - PrinterIsAcceptingJobs att3 = (PrinterIsAcceptingJobs) + PrinterIsAcceptingJobs att3 = getSelectedPrintService().getAttribute(PrinterIsAcceptingJobs.class); - PrinterState att4 = (PrinterState) + PrinterState att4 = getSelectedPrintService().getAttribute(PrinterState.class); String status = att4.toString(); diff --git a/libjava/classpath/gnu/javax/security/auth/Password.java b/libjava/classpath/gnu/javax/security/auth/Password.java index 7284b7d6823..8fb07ee6b86 100644 --- a/libjava/classpath/gnu/javax/security/auth/Password.java +++ b/libjava/classpath/gnu/javax/security/auth/Password.java @@ -40,8 +40,6 @@ package gnu.javax.security.auth; import gnu.java.security.util.ExpirableObject; -import javax.security.auth.DestroyFailedException; - /** * Immutible, though destroyable, password class. * @@ -145,7 +143,7 @@ public final class Password extends ExpirableObject for(i = 0, j = offset; i < length; i++, j++) { - this.password[i] = (char) password[j]; + this.password[i] = password[j]; // XXX this should use character encodings, other than ASCII. bPassword[i] = (byte) (password[j] & 0x7F); } diff --git a/libjava/classpath/gnu/javax/sound/AudioSecurityManager.java b/libjava/classpath/gnu/javax/sound/AudioSecurityManager.java index cd10e510665..a6dce60b394 100644 --- a/libjava/classpath/gnu/javax/sound/AudioSecurityManager.java +++ b/libjava/classpath/gnu/javax/sound/AudioSecurityManager.java @@ -1,19 +1,90 @@ +/* AudioSecurityManager.java -- Manages Security requests for Sound classes. + + Copyright (C) 2007 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + package gnu.javax.sound; import javax.sound.sampled.AudioPermission; +/** + * This class handles security requests for classes in the Sound API. + * + * A class that needs to check against a particular permission type may use this + * class to query the <code>SecurityManager</code>. + * + * For example, to check for a read permission, a class can simply pass the + * <code>Permission.READ</code> constant to + * {@link #checkPermissions(gnu.javax.sound.AudioSecurityManager.Permission))}, + * like the following code demonstrates: + * + * <pre> + * AudioSecurityManager.checkPermissions(Permission.PLAY); + * </pre> + * + * If there is need to query for all the defined permissions type, the constant + * <code>Permission.ALL</code> can be used. In alternative, the + * {@link #checkPermissions()} is presented as a shorthand. + * + * @author Mario Torre <neugens@limasoftware.net> + */ public class AudioSecurityManager { + /** + * Defines a common set of permission allowed by the specification. + */ public static enum Permission { PLAY, RECORD, ALL } + /** + * Shorthand to <code>checkPermissions(Permission.ALL)</code>. + */ public static final void checkPermissions() { checkPermissions(Permission.ALL); } + /** + * Query the <code>SecurityManager</code> agains the given + * <code>Permission</code>. + * + * @param permission + */ public static final void checkPermissions(Permission permission) { SecurityManager sm = System.getSecurityManager(); diff --git a/libjava/classpath/gnu/javax/sound/midi/dssi/DSSIMidiDeviceProvider.java b/libjava/classpath/gnu/javax/sound/midi/dssi/DSSIMidiDeviceProvider.java index baf61732d18..740b124eb65 100644 --- a/libjava/classpath/gnu/javax/sound/midi/dssi/DSSIMidiDeviceProvider.java +++ b/libjava/classpath/gnu/javax/sound/midi/dssi/DSSIMidiDeviceProvider.java @@ -44,8 +44,6 @@ import java.io.File; import java.io.FilenameFilter; import gnu.classpath.Configuration; -import gnu.javax.sound.midi.alsa.AlsaMidiSequencerDevice; - import javax.sound.midi.MidiDevice; import javax.sound.midi.MidiDevice.Info; import javax.sound.midi.spi.MidiDeviceProvider; diff --git a/libjava/classpath/gnu/javax/sound/midi/file/MidiFileWriter.java b/libjava/classpath/gnu/javax/sound/midi/file/MidiFileWriter.java index 71970d5ba6e..b9b6fe87a10 100644 --- a/libjava/classpath/gnu/javax/sound/midi/file/MidiFileWriter.java +++ b/libjava/classpath/gnu/javax/sound/midi/file/MidiFileWriter.java @@ -38,10 +38,8 @@ exception statement from your version. */ package gnu.javax.sound.midi.file; import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; import java.io.OutputStream; import javax.sound.midi.MetaMessage; diff --git a/libjava/classpath/gnu/javax/sound/sampled/AU/AUReader.java b/libjava/classpath/gnu/javax/sound/sampled/AU/AUReader.java index c9035df7338..ed5852e6c9a 100644 --- a/libjava/classpath/gnu/javax/sound/sampled/AU/AUReader.java +++ b/libjava/classpath/gnu/javax/sound/sampled/AU/AUReader.java @@ -47,7 +47,6 @@ import java.io.File; import java.io.IOException; import java.io.BufferedInputStream; import java.io.InputStream; -import java.io.DataInputStream; import java.io.FileInputStream; import java.net.URL; import java.nio.ByteBuffer; diff --git a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/GStreamerMixer.java b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/GStreamerMixer.java index b32db0f353c..aa42a4c3da8 100644 --- a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/GStreamerMixer.java +++ b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/GStreamerMixer.java @@ -37,13 +37,9 @@ exception statement from your version. */ package gnu.javax.sound.sampled.gstreamer; -import java.awt.AWTPermission; - import gnu.javax.sound.sampled.gstreamer.lines.GstSourceDataLine; import javax.sound.sampled.AudioFormat; -import javax.sound.sampled.AudioPermission; -import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Control; import javax.sound.sampled.DataLine; import javax.sound.sampled.Line; @@ -52,7 +48,6 @@ import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.Mixer; import javax.sound.sampled.SourceDataLine; import javax.sound.sampled.Control.Type; -import javax.sound.sampled.Line.Info; /** * @author Mario Torre <neugens@limasoftware.net> @@ -81,32 +76,15 @@ public class GStreamerMixer super(name, vendor, desc, vers); } } - + public static final String GST_BACKEND = GstInfo.name; public static final String GST_DECODER = "decoder"; - - private static AudioFormat[] BASIC_FORMATS = - { - new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED, - AudioSystem.NOT_SPECIFIED, - AudioSystem.NOT_SPECIFIED, - AudioSystem.NOT_SPECIFIED, - AudioSystem.NOT_SPECIFIED, - AudioSystem.NOT_SPECIFIED, - true), - - new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED, - AudioSystem.NOT_SPECIFIED, - AudioSystem.NOT_SPECIFIED, - AudioSystem.NOT_SPECIFIED, - AudioSystem.NOT_SPECIFIED, - AudioSystem.NOT_SPECIFIED, - false), - }; + public static final String GST_TYPE_NAME = "type"; + public static final String GST_FILE_EXTENSION = "ext"; /** Mixer Info */ private static final Mixer.Info INFO = new GStreamerMixer.GstInfo(); - + public Line getLine(Line.Info info) throws LineUnavailableException { diff --git a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReader.java b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReader.java index 53b2155d8ec..b90caef24b5 100644 --- a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReader.java +++ b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReader.java @@ -37,13 +37,14 @@ exception statement from your version. */ package gnu.javax.sound.sampled.gstreamer.io; +import gnu.javax.sound.sampled.gstreamer.GStreamerMixer; + import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; - import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; @@ -59,21 +60,61 @@ import javax.sound.sampled.spi.AudioFileReader; */ public class GstAudioFileReader extends AudioFileReader -{ +{ @Override public AudioFileFormat getAudioFileFormat(File file) throws UnsupportedAudioFileException, IOException { - throw new UnsupportedAudioFileException("Unsupported encoding."); + StringBuffer name = new StringBuffer(file.getName()); + String _name = name.substring(name.lastIndexOf(".") + 1); + + return getAudioFileFormat( + new BufferedInputStream(new FileInputStream(file)), _name); } @Override public AudioFileFormat getAudioFileFormat(InputStream is) throws UnsupportedAudioFileException, IOException { - throw new UnsupportedAudioFileException("Unsupported encoding."); + return getAudioFileFormat(is, null); } + private AudioFileFormat getAudioFileFormat(InputStream is, String extension) + throws UnsupportedAudioFileException + { + AudioFormat format = null; + try + { + format = GstAudioFileReaderNativePeer.getAudioFormat(is); + } + catch (Exception e) + { + UnsupportedAudioFileException ex = + new UnsupportedAudioFileException("Unsupported encoding."); + + ex.initCause(ex.getCause()); + throw ex; + } + + if (format == null) + throw new UnsupportedAudioFileException("Unsupported encoding."); + + String name = format.getProperty(GStreamerMixer.GST_DECODER).toString(); + + if (extension == null) + { + extension = + format.getProperty(GStreamerMixer.GST_FILE_EXTENSION).toString(); + } + + AudioFileFormat.Type type = + new AudioFileFormat.Type(name, extension); + + // TODO: we should calculate this in some way. We don't need it, but + // application may want to use this data. + return new AudioFileFormat(type, format, AudioSystem.NOT_SPECIFIED); + } + @Override public AudioFileFormat getAudioFileFormat(URL url) throws UnsupportedAudioFileException, IOException @@ -96,8 +137,11 @@ public class GstAudioFileReader } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); + UnsupportedAudioFileException ex = + new UnsupportedAudioFileException("Unsupported encoding."); + + ex.initCause(ex.getCause()); + throw ex; } // get the header size diff --git a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReaderNativePeer.java b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReaderNativePeer.java index 45ae4ff8588..761720fee5d 100644 --- a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReaderNativePeer.java +++ b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstAudioFileReaderNativePeer.java @@ -38,6 +38,7 @@ exception statement from your version. */ package gnu.javax.sound.sampled.gstreamer.io; +import gnu.classpath.Pointer; import gnu.javax.sound.sampled.gstreamer.GStreamerMixer; import java.io.BufferedInputStream; @@ -90,8 +91,11 @@ final class GstAudioFileReaderNativePeer public String isSigned = null; public String layer = null; + public String bitrate = null; + public String framed = null; + public String type = null; } @@ -108,18 +112,7 @@ final class GstAudioFileReaderNativePeer public static AudioFormat getAudioFormat(InputStream is) throws Exception { - GstHeader header = new GstHeader(); - - BufferedInputStream stream = new BufferedInputStream(is); - if(!stream.markSupported()) - throw new IOException("Stream must support marking."); - - stream.mark(0); - - if (!gstreamer_get_audio_format_stream(header, stream)) - return null; - - return getAudioFormat(header); + return getAudioFormat(is, new GstHeader()); } public static AudioFormat getAudioFormat(URL url) throws Exception @@ -127,13 +120,20 @@ final class GstAudioFileReaderNativePeer GstHeader header = new GstHeader(); header.file = url.toExternalForm(); - BufferedInputStream stream = new BufferedInputStream(url.openStream()); + return getAudioFormat(url.openStream(), header); + } + + private static AudioFormat getAudioFormat(InputStream is, GstHeader header) + throws Exception + { + BufferedInputStream stream = new BufferedInputStream(is); if(!stream.markSupported()) throw new IOException("Stream must support marking."); stream.mark(0); - if (!gstreamer_get_audio_format_stream(header, stream)) + if (!gstreamer_get_audio_format_stream(header, new GstInputStream(stream). + getNativeClass())) return null; return getAudioFormat(header); @@ -200,27 +200,31 @@ final class GstAudioFileReaderNativePeer bigEndian = true; } + String ext = null; + int frameSize = na; float frameRate = na; String lowerCase = header.name.toLowerCase(); // FIXME: frameRate = sampleRate in these cases under all the tests so far // but I'm not sure if this is always correct... - if (lowerCase.contains("law") || lowerCase.contains("au") || - lowerCase.contains("x-au")) + if (lowerCase.contains("law") || lowerCase.contains("au")) { frameSize = (sampleSizeInBits >> 3) * channels; frameRate = sampleRate; + ext = "au"; } else if (lowerCase.contains("wav")) { frameSize = ((sampleSizeInBits + 7) / 8) * channels; frameRate = sampleRate; + ext = "wav"; } else if (lowerCase.contains("iff")) { frameSize = (sampleSizeInBits * channels) / 8; frameRate = sampleRate; + ext = "aiff"; } // write all the additional properties we got to identify @@ -228,6 +232,9 @@ final class GstAudioFileReaderNativePeer Map<String, Object> properties = new HashMap<String, Object>(); properties.put(GStreamerMixer.GST_BACKEND, true); properties.put(GStreamerMixer.GST_DECODER, header.name); + properties.put(GStreamerMixer.GST_TYPE_NAME, encoding.toString()); + if (ext != null) + properties.put(GStreamerMixer.GST_FILE_EXTENSION, ext); /* now we put in some of the additional properties if we have them */ if (header.type != null) properties.put("type", header.type); @@ -251,26 +258,27 @@ final class GstAudioFileReaderNativePeer /* ***** native methods ***** */ /** - * Retrieve header information about the file being played. - * - * @param info - * @return + * Retrieve header information about the stream being played. */ native static final protected boolean gstreamer_get_audio_format_stream(GstHeader info, - BufferedInputStream istream); + Pointer pointer); /** * Retrieve header information about the file being played. - * - * @param info - * @return */ native static final protected boolean gstreamer_get_audio_format_file(GstHeader info); + /** + * Initialize the native peer and enables the object cache. + * It is meant to be used by the static initializer. + */ + native private static final void init_id_cache(); + static { System.loadLibrary("gstreamerpeer"); //$NON-NLS-1$ + init_id_cache(); } } diff --git a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstInputStream.java b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstInputStream.java new file mode 100644 index 00000000000..0702eded7e8 --- /dev/null +++ b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/io/GstInputStream.java @@ -0,0 +1,119 @@ +/* GstInputStream.java -- Trampoline class for an InputStream, mean to be used + by native code. + Copyright (C) 2007 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package gnu.javax.sound.sampled.gstreamer.io; + +import gnu.classpath.Pointer; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Encapsulates the functionality of an InputStream Object. + * + * This class is only meant to be used by the native code, to allow reading + * of the given InputStream as part of a the GStreamer InputStream Source + * Plugin. + * + * <strong>Note:</strong> this class will be not garbage collected as the + * native code contains strong references to internal fields. + * The native layer provides a method that can be called by the C code to + * free the resources and to let the garbage collected to handle this class + * when not needed anymore. + * + * @author Mario Torre <neugens@limasoftware.net> + */ +public class GstInputStream +{ + /** The real InputStream on which to perform reading operations. */ + private InputStream istream; + + /** + * Initialized in the native code, don't change without changes + * in the native layer. + */ + private Pointer gstInputStream = null; + + public GstInputStream(InputStream istream) + { + this.istream = istream; + init_instance(); + } + + public int read(byte[] buf, int off, int len) throws IOException + { + return this.istream.read(buf, off, len); + } + + public int available() throws IOException + { + return this.istream.available(); + } + + /** + * Return a reference to the GstInputStream native class as a Pointer object. + * This method is intended as an helper accessor and the returned pointer + * needs to be casted and used in the native code only. + * + * @return Pointer to the native GstInputStream class. + */ + public Pointer getNativeClass() + { + return this.gstInputStream; + } + + /* native methods */ + + /** + * Initialize the native peer and enables the object cache. + * It is meant to be used by the class constructor. + */ + native private final void init_instance(); + + /** + * Initialize the native peer and enables the object cache. + * It is meant to be used by the static initializer. + */ + native private static final void init_id_cache(); + + static + { + System.loadLibrary("gstreamerpeer"); //$NON-NLS-1$ + init_id_cache(); + } +} diff --git a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstDataLine.java b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstDataLine.java index 0467c955905..33be15c58b8 100644 --- a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstDataLine.java +++ b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstDataLine.java @@ -41,22 +41,13 @@ import javax.sound.sampled.AudioFormat; import javax.sound.sampled.Control; import javax.sound.sampled.DataLine; import javax.sound.sampled.LineListener; -import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.Control.Type; public abstract class GstDataLine implements DataLine { - public static enum State - { - PLAY, PAUSE, STOP - } - public static final int DEFAULT_BUFFER_SIZE = 1024; - /** Represents the playing state of this Line. */ - protected State state = State.STOP; - /** Represents if this Line is opened or not. */ protected Boolean open = false; @@ -90,12 +81,7 @@ public abstract class GstDataLine // TODO Auto-generated method stub return 0; } - - public boolean isRunning() - { - return (state == State.PLAY || state == State.PAUSE); - } - + public void addLineListener(LineListener listener) { // TODO Auto-generated method stub @@ -131,15 +117,35 @@ public abstract class GstDataLine return false; } - public void open() throws LineUnavailableException + public void removeLineListener(LineListener listener) { // TODO Auto-generated method stub } - public void removeLineListener(LineListener listener) + /* protected methods for subclasses */ + + /** + * @param open the open to set + */ + protected void setOpen(Boolean open) { - // TODO Auto-generated method stub + this.open = open; + } + + /** + * @param bufferSize the bufferSize to set + */ + protected void setBufferSize(int bufferSize) + { + this.bufferSize = bufferSize; + } + /** + * @param format the format to set + */ + protected void setFormat(AudioFormat format) + { + this.format = format; } } diff --git a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstNativeDataLine.java b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstNativeDataLine.java index 2b41a118672..84007ac97e7 100644 --- a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstNativeDataLine.java +++ b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstNativeDataLine.java @@ -37,12 +37,41 @@ exception statement from your version. */ package gnu.javax.sound.sampled.gstreamer.lines; +import gnu.classpath.Pointer; + +import javax.sound.sampled.LineUnavailableException; + public class GstNativeDataLine -{ +{ + public static final GstPipeline createSourcePipeline(int bufferSize) + throws LineUnavailableException + { + GstPipeline pipeline = new GstPipeline(bufferSize); + + pipeline.createForWrite(); + + if (!setup_sink_pipeline(pipeline.getNativeClass())) + throw new LineUnavailableException("Line unavailable"); + + return pipeline; + } + /* native methods */ + /** + * Initialize the native peer and enables the object cache. + * It is meant to be used by the static initializer. + */ + native static final private void init_id_cache(); + + /** + * Setup a new GStreamer Pipeline + */ + native static final private boolean setup_sink_pipeline(Pointer pipeline); + static { System.loadLibrary("gstreamerpeer"); //$NON-NLS-1$ + init_id_cache(); } } diff --git a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstPipeline.java b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstPipeline.java index d1460e5090f..f561f71c2fa 100644 --- a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstPipeline.java +++ b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstPipeline.java @@ -34,24 +34,382 @@ or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ + package gnu.javax.sound.sampled.gstreamer.lines; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.prefs.Preferences; + +import javax.sound.sampled.LineUnavailableException; + import gnu.classpath.Pointer; /** + * This class represent a GStreamer pipeline and is resposible to handle the + * flow of data to and from the GStreamer native backend. * * @author Mario Torre <neugens@limasoftware.net> */ public class GstPipeline { + /* + * Implementation note: + * This class is at first a bit confusing as it serves as a gateway + * to a real filesystem named pipe. + * The pipelines is shared by the gstreamer backend and by the java code. + * If the operation we are performing is to play a given stream of bytes, + * we need to open the java side of the pipeline for writing, which is done + * in the prepareWrite method. At the same time, the native side of the code + * need to open the pipeline in read mode, to get access to the data, + * and hence, act as a source element. This is why you will see terms + * like "read" or "source" in methods that are used to write in the pipeline, + * in other words, each the native operation is the opposite of the java + * side operation. + * Opening the pipe to record audio data from the sound card works the same + * except that all the operation are inverted. + */ + + // These enums are used in the native code also, changes here must reflect + // changes in the native code. + public static enum State + { + PLAY, PAUSE, STOP, CLOSE + } + + private static final int READ = 0; + private static final int WRITE = 1; + private static final int QUEUED = 1; + + private static final String CAPACITY_KEY = "Capacity"; + + private static final Object [] lock = new Object[0]; + + /* + * Preference subsystem. We use this to store some system specific settings. + */ + protected Preferences prefs = + Preferences.userNodeForPackage(GstPipeline.class).node("GStreamer"); + + // used by the native code, stores the size of the named pipeline + // created by the operating system. + private long capacity = -1; + + /** Represents the playing state of this Line. */ + private State state = State.STOP; + + /** The name of the named pipe. */ + // Will be setup and filled in the native code. See the native library + // for details. + private String name = null; + + /** This is the named pipe that will be read by the gstreamer backend. */ + private FileOutputStream output = null; + + /** + * Defines if we are getting data from a sink pipe + * or writing to a source pipe. + */ + private boolean source = true; + + /** Indicate that we are ready to process audio data to/from the pipe. */ + private boolean ready = false; + /** * This is the native GStreamer Pipeline. + */ + // This field is used by the native code, so any change to it must be + // followed by similar changes in the native peer. + private Pointer pipeline = null; + + /** + * Creates a new GstPipeline with a capacity of + * {@link GstDataLine#DEFAULT_BUFFER_SIZE}. * - * This field is used by the native code, so any change to it must be - * followed by similar changes in the native peer. + * @see GstDataLine#DEFAULT_BUFFER_SIZE + */ + public GstPipeline() + { + this(GstDataLine.DEFAULT_BUFFER_SIZE); + } + + /** + * Creates a new GstPipeline with a capacity of bufferSize. + * @see GstDataLine#DEFAULT_BUFFER_SIZE + */ + public GstPipeline(int bufferSize) + { + // see if we need to detect the size of the named pipe or we can use + // an already computet default for this system. + // Note that this is very different from the bufferSize parameter, + // see below. + capacity = prefs.getLong(CAPACITY_KEY, -1); + if (capacity == -1) + { + synchronized (lock) + { + capacity = detect_pipe_size(); + } + + prefs.putLong(CAPACITY_KEY, capacity); + } + + // FIXME: bufferSize actually not used nor needed by the backend. + // Applications that expects a buffer of different size will be a + // bit disappointed by that.. + init_instance(); + + // need to remove the named pipe in case of abnormal termination + Runtime.getRuntime().addShutdownHook(new CleanPipeline()); + } + + /** + * Creates a source pipeline. A source pipeline is a pipe you send data for + * processing using the write method. + */ + public void createForWrite() throws LineUnavailableException + { + // create the named pipe + if (!create_named_pipe(this.pipeline)) + throw new LineUnavailableException("Unable to create filesystem pipe"); + + open_native_pipe(this.pipeline, READ); + prepareWrite(); + + this.source = true; + } + + /** + * @return the state + */ + public State getState() + { + return this.state; + } + + /** + * Closes this pipeline. + * Short hand for #setState(State.STOP). + */ + public void close() + { + setState(State.STOP); + } + + /** + * @param state the state to set */ - private Pointer pipeline; + public void setState(final State state) + { + int _state = -1; + switch (state) + { + case PLAY: + _state = 0; + break; + + case PAUSE: + _state = 1; + break; + + case STOP: case CLOSE: + _state = 2; + closePipe(); + break; + } - native private void setState(); + if (set_state(pipeline, _state)) + GstPipeline.this.state = state; + } + + /** + * Return a reference to the GstPipeline native class as a Pointer object. + * This method is intended as an helper accessor and the returned pointer + * needs to be casted and used in the native code only. + * + * @return Pointer to the native GstPipeline class. + */ + public Pointer getNativeClass() + { + return this.pipeline; + } + + /** + * Write length bytes from the given buffer into this pipeline, + * starting at offset. + * This method block if the pipeline can't accept more data. + * + * @param buffer + * @param offset + * @param length + * @return + */ + public int write(byte[] buffer, int offset, int length) + { + if (this.state == State.STOP) + return -1; + else if (this.state == State.PAUSE) + return 0; + else if (!ready) + return -1; + + try + { + if (output != null) + { + output.write(buffer, offset, length); + return length; + } + return 0; + } + catch (Exception e) + { + /* nothing to do */ + } + + return -1; + } + + public int read(byte[] buffer, int offset, int length) + { + return 0; + } + + public int available() + { + if (this.source) + return available(this.pipeline, READ); + else + return available(this.pipeline, WRITE); + } + + /** + * Wait for remaining data to be enqueued in the pipeline. + */ + public void drain() + { + if (this.state == State.STOP) + return; + + try + { + // wait untill there is anymore data in the pipe + while (available(this.pipeline, QUEUED) > 0) + Thread.sleep(3000); + + // plus a bit to allow data to be processed + Thread.sleep(1000); + } + catch (InterruptedException e) + { + /* nothing to do*/ + } + } + + /** + * Flush all the data currently waiting to be processed. + */ + public void flush() + { + try + { + if (source) + this.output.flush(); + } + catch (IOException e) + { + /* nothing */ + } + } + + private void closePipe() + { + try + { + GstPipeline.this.flush(); + if (source) + GstPipeline.this.output.close(); + } + catch (IOException e) + { + /* nothing to do */ + } + } + + private void prepareWrite() + { + try + { + // if this is not completed for some reason, we will catch + // in the write method. As this call can block, we assume we will + // succeed and that the dataline can get data. + GstPipeline.this.ready = true; + GstPipeline.this.output = new FileOutputStream(name); + } + catch (Exception e) + { + GstPipeline.this.ready = false; + } + } + + /* ***** native ***** */ + + /** + * Initialize the native peer and enables the object cache. + * It is meant to be used by the static initializer. + */ + native private static final void init_id_cache(); + + /** + * Set the playing state of this pipeline. + */ + native private static final boolean set_state(Pointer pipeline, int state); + + /** + * Get the number of bytes currently available for reading or writing + * from the pipeline. + */ + native private static final int available(Pointer pipeline, int mode); + + /** + * Open the native pipeline with the given mode. + */ + native private static final void open_native_pipe(Pointer jpipeline, + int mode); + + /** + * Close the native pipeline. + */ + native private static final void close_native_pipe(Pointer jpipeline); + + /** + * Initialize the native peer and enables the object cache. + * It is meant to be used by the class constructor. + */ + native private final void init_instance(); + + /** + * Crates the named pipe used to pass data between the application code + * and gstreamer. + */ + native private final boolean create_named_pipe(Pointer jpipeline); + + /** + * Detect and return the size of the filesystem named pipe. + */ + native private final long detect_pipe_size(); + + private class CleanPipeline extends Thread + { + public void run() + { + GstPipeline.close_native_pipe(GstPipeline.this.pipeline); + } + } + static + { + System.loadLibrary("gstreamerpeer"); //$NON-NLS-1$ + init_id_cache(); + } } diff --git a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstSourceDataLine.java b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstSourceDataLine.java index d1a0262e5b5..f149ab39df2 100644 --- a/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstSourceDataLine.java +++ b/libjava/classpath/gnu/javax/sound/sampled/gstreamer/lines/GstSourceDataLine.java @@ -38,6 +38,7 @@ exception statement from your version. */ package gnu.javax.sound.sampled.gstreamer.lines; import gnu.javax.sound.AudioSecurityManager; +import gnu.javax.sound.sampled.gstreamer.lines.GstPipeline.State; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.LineUnavailableException; @@ -48,87 +49,105 @@ import static gnu.javax.sound.AudioSecurityManager.Permission; public class GstSourceDataLine extends GstDataLine implements SourceDataLine { + private GstPipeline pipeline = null; + private boolean open = false; + public GstSourceDataLine(AudioFormat format) { super(format); } + public void open() throws LineUnavailableException + { + AudioSecurityManager.checkPermissions(Permission.PLAY); + + if (open) + throw new IllegalStateException("Line already opened"); + + // create the pipeline + pipeline = GstNativeDataLine.createSourcePipeline(getBufferSize()); + + this.open = true; + } + public void open(AudioFormat fmt) throws LineUnavailableException { AudioSecurityManager.checkPermissions(Permission.PLAY); - throw new LineUnavailableException("Line unavailable"); + + setFormat(fmt); + this.open(); } public void open(AudioFormat fmt, int size) throws LineUnavailableException { AudioSecurityManager.checkPermissions(Permission.PLAY); - throw new LineUnavailableException("Line unavailable"); + + setBufferSize(size); + this.open(fmt); } public int write(byte[] buf, int offset, int length) - { - // TODO Auto-generated method stub - return 0; + { + return this.pipeline.write(buf, offset, length); } public int available() { - // TODO Auto-generated method stub - return 0; + return this.pipeline.available(); } public void drain() { - // TODO Auto-generated method stub - + this.pipeline.drain(); } public void flush() { - // TODO Auto-generated method stub - + this.pipeline.flush(); } public int getFramePosition() { - // TODO Auto-generated method stub + System.out.println("getFramePosition -: IMPLEMENT ME!!"); return 0; } public long getLongFramePosition() { - // TODO Auto-generated method stub + System.out.println("getLongFramePosition -: IMPLEMENT ME!!"); return 0; } public long getMicrosecondPosition() { - // TODO Auto-generated method stub + System.out.println("getMicrosecondPosition -: IMPLEMENT ME!!"); return 0; } public boolean isActive() { - // TODO Auto-generated method stub - return false; + State state = pipeline.getState(); + return (state == State.PLAY || state == State.PAUSE); } public void start() { - // TODO Auto-generated method stub - + pipeline.setState(State.PLAY); } public void stop() { - // TODO Auto-generated method stub - + pipeline.setState(State.PAUSE); } public void close() { - // TODO Auto-generated method stub - + pipeline.close(); + this.open = false; + } + + public boolean isRunning() + { + return (pipeline.getState() == State.PLAY); } - } diff --git a/libjava/classpath/gnu/javax/swing/text/html/css/FontSize.java b/libjava/classpath/gnu/javax/swing/text/html/css/FontSize.java index 2795b678401..203eadc4073 100644 --- a/libjava/classpath/gnu/javax/swing/text/html/css/FontSize.java +++ b/libjava/classpath/gnu/javax/swing/text/html/css/FontSize.java @@ -143,7 +143,7 @@ public class FontSize { int end = value.indexOf("pt"); String number = value.substring(0, end); - int intVal = Integer.parseInt(number); + int intVal = (int) Double.parseDouble(number); return intVal; } @@ -160,7 +160,7 @@ public class FontSize String number = value.substring(0, end); try { - int intVal = Integer.parseInt(number); + int intVal = (int) Double.parseDouble(number); return intVal; } catch (NumberFormatException ex) @@ -177,7 +177,7 @@ public class FontSize String number = value.substring(0, end); try { - int intVal = Integer.parseInt(number); + int intVal = (int) Double.parseDouble(number); return intVal * par / 100; } catch (NumberFormatException ex) diff --git a/libjava/classpath/gnu/javax/swing/text/html/css/Selector.java b/libjava/classpath/gnu/javax/swing/text/html/css/Selector.java index 210df3a7b65..6e182a53623 100644 --- a/libjava/classpath/gnu/javax/swing/text/html/css/Selector.java +++ b/libjava/classpath/gnu/javax/swing/text/html/css/Selector.java @@ -93,8 +93,6 @@ public class Selector * instance, the html tag). * * @param tags - * @param classes - * @param ids * * @return <code>true</code> when this selector matches the element path, * <code>false</code> otherwise diff --git a/libjava/classpath/gnu/javax/swing/text/html/parser/models/node.java b/libjava/classpath/gnu/javax/swing/text/html/parser/models/node.java index c615ddff350..54469b34995 100644 --- a/libjava/classpath/gnu/javax/swing/text/html/parser/models/node.java +++ b/libjava/classpath/gnu/javax/swing/text/html/parser/models/node.java @@ -177,7 +177,7 @@ public class node /** * Do the match operation with the given token. This sets various * flags. - * @param token The token to match. + * @param a_token The token to match. * @return true if the the token matches node, false if it does not match * or if the node is closed. */ diff --git a/libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java b/libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java index c0d1e636e92..e99be3238e9 100644 --- a/libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java +++ b/libjava/classpath/gnu/javax/swing/text/html/parser/support/Parser.java @@ -216,7 +216,7 @@ public class Parser * The tag validator closes all unclosed elements that are required * to have the end (closing) tag. * - * @param element The tag being fictionally (forcibly) closed. + * @param tElement The tag being fictionally (forcibly) closed. */ protected void handleSupposedEndTag(Element tElement) { @@ -234,7 +234,7 @@ public class Parser * assigned to the empty one, the previous value is * restored before return. * - * @param element The tag being fictionally (forcibly) closed. + * @param tElement The tag being fictionally (forcibly) closed. */ protected void handleSupposedStartTag(Element tElement) { @@ -523,8 +523,7 @@ public class Parser restOfTag(false, name, start); buffer.setLength(0); - - script: + while (!SCRIPT_CLOSE.matches(this)) { append(getNextToken()); @@ -606,8 +605,7 @@ public class Parser restOfTag(false, name, start); buffer.setLength(0); - - style: + while (!STYLE_CLOSE.matches(this)) { append(getNextToken()); @@ -742,7 +740,7 @@ public class Parser * Handle the tag with no content, like <br>. The method is * called for the elements that, in accordance with the current DTD, * has an empty content. - * @param The tag being handled. + * @param tag The tag being handled. * @throws javax.swing.text.ChangedCharSetException */ protected void handleEmptyTag(TagElement tag) @@ -754,7 +752,7 @@ public class Parser * The method is called when the HTML closing tag ((like </table>) * is found or if the parser concludes that the one should be present * in the current position. - * @param The tag + * @param tag The tag */ protected void handleEndTag(TagElement tag) { @@ -769,7 +767,7 @@ public class Parser * The method is called when the HTML opening tag ((like <table>) * is found or if the parser concludes that the one should be present * in the current position. - * @param The tag + * @param tag The tag */ protected void handleStartTag(TagElement tag) { @@ -798,7 +796,7 @@ public class Parser * both title starting and closing tags are already behind. * The passed argument contains the concatenation of all * title text sections. - * @param The title text. + * @param title The title text. */ protected void handleTitle(char[] title) { @@ -868,7 +866,7 @@ public class Parser { Object value = HTML.NULL_ATTRIBUTE_VALUE; - Element e = (Element) dtd.elementHash.get(element.toLowerCase()); + Element e = dtd.elementHash.get(element.toLowerCase()); if (e != null) { AttributeList attr = e.getAttribute(attribute); @@ -1146,7 +1144,7 @@ public class Parser * is found or if the parser concludes that the one should be present * in the current position. The method is called immediately before * calling the handleStartTag. - * @param The tag + * @param tag The tag */ protected void startTag(TagElement tag) throws ChangedCharSetException @@ -1182,7 +1180,7 @@ public class Parser * A hooks for operations, preceeding call to handleEmptyTag(). * Handle the tag with no content, like <br>. As no any * nested tags are expected, the tag validator is not involved. - * @param The tag being handled. + * @param tag The tag being handled. */ private void _handleEmptyTag(TagElement tag) { @@ -1208,7 +1206,7 @@ public class Parser * A hooks for operations, preceeding call to handleEndTag(). * The method is called when the HTML closing tag * is found. Calls handleTitle after closing the 'title' tag. - * @param The tag + * @param tag The tag */ private void _handleEndTag(TagElement tag) { @@ -1254,7 +1252,7 @@ public class Parser * The method is called when the HTML opening tag ((like <table>) * is found. * Package-private to avoid an accessor method. - * @param The tag + * @param tag The tag */ void _handleStartTag(TagElement tag) { @@ -1328,7 +1326,7 @@ public class Parser private TagElement makeTagElement(String name, boolean isSupposed) { - Element e = (Element) dtd.elementHash.get(name.toLowerCase()); + Element e = dtd.elementHash.get(name.toLowerCase()); if (e == null) { error("Unknown tag <" + name + ">"); diff --git a/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java b/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java index 0ffc6c8b754..80bb333a528 100644 --- a/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java +++ b/libjava/classpath/gnu/javax/swing/text/html/parser/support/low/ReaderTokenizer.java @@ -240,15 +240,14 @@ public class ReaderTokenizer /** * Read the given number of the tokens. Add the needed number of EOF * tokens if there are no more data in the stream. - * @param amount The number of additional tokens to read. + * @param numberOfTokens The number of additional tokens to read. */ void read(int numberOfTokens) throws IOException { if (numberOfTokens <= 0) return; - - reading: + for (int i = 0; i < numberOfTokens; i++) readToken(); } diff --git a/libjava/classpath/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java b/libjava/classpath/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java index 654acbbb58c..43c07572a14 100644 --- a/libjava/classpath/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java +++ b/libjava/classpath/gnu/javax/swing/text/html/parser/support/parameterDefaulter.java @@ -80,7 +80,7 @@ public class parameterDefaulter if (atts == null) { htmlAttributeSet set = new htmlAttributeSet(); - Element e = (Element) dtd.elementHash.get(element.toLowerCase()); + Element e = dtd.elementHash.get(element.toLowerCase()); if (e != null) { diff --git a/libjava/classpath/gnu/javax/swing/text/html/parser/support/textPreProcessor.java b/libjava/classpath/gnu/javax/swing/text/html/parser/support/textPreProcessor.java index 6fd79e2589e..0cb6d7a59f3 100644 --- a/libjava/classpath/gnu/javax/swing/text/html/parser/support/textPreProcessor.java +++ b/libjava/classpath/gnu/javax/swing/text/html/parser/support/textPreProcessor.java @@ -109,7 +109,7 @@ public class textPreProcessor * \r or \r\n mutate into \n. Tabs are * preserved. * The content of the passed buffer is destroyed. - * @param text + * @param a_text * @return */ public char[] preprocessPreformatted(StringBuffer a_text) |