geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeff Genender <jgenen...@apache.org>
Subject Re: svn commit: r446519 [4/4] - in /geronimo/sandbox/gcache: ./ openwire/ openwire/src/ openwire/src/main/ openwire/src/main/java/ openwire/src/main/java/org/ openwire/src/main/java/org/apache/ openwire/src/main/java/org/apache/geronimo/ openwire/src/main/...
Date Fri, 15 Sep 2006 09:24:54 GMT


Jason Dillon wrote:
> oooh.... wildcard imports... naughty :-P
> 

Copy and paste from AMQ ;-)

> You might also want to sick to a standard header, nix the html bits:

That was the Intellij template header :(  It seemed to convert breaks to
<p/>

Jeff

> 
> /*
> * Licensed to the Apache Software Foundation (ASF) under one
> * or more contributor license agreements.  See the NOTICE file
> * distributed with this work for additional information
> * regarding copyright ownership.  The ASF licenses this file
> * to you under the Apache License, Version 2.0 (the
> * "License"); you may not use this file except in compliance
> * with the License.  You may obtain a copy of the License at
> *
> *  http://www.apache.org/licenses/LICENSE-2.0
> *
> * Unless required by applicable law or agreed to in writing,
> * software distributed under the License is distributed on an
> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> * KIND, either express or implied.  See the License for the
> * specific language governing permissions and limitations
> * under the License.
> */
> 
> --jason
> 
> 
> On Sep 14, 2006, at 9:57 PM, jgenender@apache.org wrote:
> 
>> Added:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/MarshallingSupport.java
>>
>> URL:
>> http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/MarshallingSupport.java?view=auto&rev=446519
>>
>> ==============================================================================
>>
>> ---
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/MarshallingSupport.java
>> (added)
>> +++
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/MarshallingSupport.java
>> Thu Sep 14 21:57:24 2006
>> @@ -0,0 +1,309 @@
>> +package org.apache.geronimo.openwire.util;
>> +
>> +import java.io.*;
>> +import java.util.*;
>> +
>> +/**
>> + * Copyright 2006 The Apache Software Foundation
>> + * <p/>
>> + * Licensed under the Apache License, Version 2.0 (the "License");
>> + * you may not use this file except in compliance with the License.
>> + * You may obtain a copy of the License at
>> + * <p/>
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + * <p/>
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +public class MarshallingSupport {
>> +
>> +    public static final byte NULL                    = 0;
>> +    public static final byte BOOLEAN_TYPE            = 1;
>> +    public static final byte BYTE_TYPE               = 2;
>> +    public static final byte CHAR_TYPE               = 3;
>> +    public static final byte SHORT_TYPE              = 4;
>> +    public static final byte INTEGER_TYPE            = 5;
>> +    public static final byte LONG_TYPE               = 6;
>> +    public static final byte DOUBLE_TYPE             = 7;
>> +    public static final byte FLOAT_TYPE              = 8;
>> +    public static final byte STRING_TYPE             = 9;
>> +    public static final byte BYTE_ARRAY_TYPE         = 10;
>> +    public static final byte MAP_TYPE                = 11;
>> +    public static final byte LIST_TYPE               = 12;
>> +    public static final byte BIG_STRING_TYPE         = 13;
>> +
>> +    static  public void marshalPrimitiveMap(Map map, DataOutputStream
>> out) throws IOException {
>> +        if( map == null ) {
>> +            out.writeInt(-1);
>> +        } else {
>> +            out.writeInt(map.size());
>> +            for (Iterator iter = map.keySet().iterator();
>> iter.hasNext();) {
>> +                String name = (String) iter.next();
>> +                out.writeUTF(name);
>> +                Object value = map.get(name);
>> +                marshalPrimitive(out, value);
>> +            }
>> +        }
>> +    }
>> +
>> +    static public Map unmarshalPrimitiveMap(DataInputStream in)
>> throws IOException {
>> +        return unmarshalPrimitiveMap(in, Integer.MAX_VALUE);
>> +    }
>> +
>> +    /**
>> +     * @param in
>> +     * @return
>> +     * @throws IOException
>> +     * @throws IOException
>> +     */
>> +    public static Map unmarshalPrimitiveMap(DataInputStream in, int
>> max_property_size) throws IOException {
>> +        int size = in.readInt();
>> +        if( size > max_property_size ) {
>> +            throw new IOException("Primitive map is larger than the
>> allowed size: "+size);
>> +        }
>> +        if( size < 0 ) {
>> +            return null;
>> +        } else {
>> +            HashMap rc = new HashMap(size);
>> +            for(int i=0; i < size; i++) {
>> +                String name = in.readUTF();
>> +                rc.put(name, unmarshalPrimitive(in));
>> +            }
>> +            return rc;
>> +        }
>> +
>> +    }
>> +
>> +    public static void marshalPrimitiveList(List list,
>> DataOutputStream out) throws IOException {
>> +        out.writeInt(list.size());
>> +        for (Iterator iter = list.iterator(); iter.hasNext();) {
>> +            Object element = (Object) iter.next();
>> +            marshalPrimitive(out, element);
>> +        }
>> +    }
>> +
>> +    public static List unmarshalPrimitiveList(DataInputStream in)
>> throws IOException {
>> +        int size = in.readInt();
>> +        List answer = new ArrayList(size);
>> +        while (size-- > 0) {
>> +            answer.add(unmarshalPrimitive(in));
>> +        }
>> +        return answer;
>> +    }
>> +
>> +    static public void marshalPrimitive(DataOutputStream out, Object
>> value) throws IOException {
>> +        if( value == null ) {
>> +            out.writeByte(NULL);
>> +        } else if( value.getClass() == Boolean.class ) {
>> +            out.writeByte(BOOLEAN_TYPE);
>> +            out.writeBoolean(((Boolean)value).booleanValue());
>> +        } else if( value.getClass() == Byte.class ) {
>> +            out.writeByte(BYTE_TYPE);
>> +            out.writeByte(((Byte)value).byteValue());
>> +        } else if( value.getClass() == Character.class ) {
>> +            out.writeByte(CHAR_TYPE);
>> +            out.writeChar(((Character)value).charValue());
>> +        } else if( value.getClass() == Short.class ) {
>> +            out.writeByte(SHORT_TYPE);
>> +            out.writeShort(((Short)value).shortValue());
>> +        } else if( value.getClass() == Integer.class ) {
>> +            out.writeByte(INTEGER_TYPE);
>> +            out.writeInt(((Integer)value).intValue());
>> +        } else if( value.getClass() == Long.class ) {
>> +            out.writeByte(LONG_TYPE);
>> +            out.writeLong(((Long)value).longValue());
>> +        } else if( value.getClass() == Float.class ) {
>> +            out.writeByte(FLOAT_TYPE);
>> +            out.writeFloat(((Float)value).floatValue());
>> +        } else if( value.getClass() == Double.class ) {
>> +            out.writeByte(DOUBLE_TYPE);
>> +            out.writeDouble(((Double)value).doubleValue());
>> +        } else if( value.getClass() == byte[].class ) {
>> +            out.writeByte(BYTE_ARRAY_TYPE);
>> +            out.writeInt(((byte[])value).length);
>> +            out.write(((byte[])value));
>> +        } else if( value.getClass() == String.class ) {
>> +            String s = (String)value;
>> +
>> +            // If it's too big, out.writeUTF may not able able to
>> write it out.
>> +            if( s.length() < Short.MAX_VALUE/4 ) {
>> +                out.writeByte(STRING_TYPE);
>> +                out.writeUTF((String)value);
>> +            } else {
>> +                out.writeByte(BIG_STRING_TYPE);
>> +                writeUTF8(out, s);
>> +            }
>> +
>> +        } else if( value instanceof Map) {
>> +            out.writeByte(MAP_TYPE);
>> +            marshalPrimitiveMap((Map) value, out);
>> +        } else if( value instanceof List) {
>> +            out.writeByte(LIST_TYPE);
>> +            marshalPrimitiveList((List) value, out);
>> +        } else {
>> +            throw new IOException("Object is not a primitive: "+value);
>> +        }
>> +    }
>> +
>> +
>> +    static public Object unmarshalPrimitive(DataInputStream in)
>> throws IOException {
>> +        Object value=null;
>> +        switch( in.readByte() ) {
>> +        case BYTE_TYPE:
>> +            value = new Byte(in.readByte());
>> +            break;
>> +        case BOOLEAN_TYPE:
>> +            value = in.readBoolean() ? Boolean.TRUE : Boolean.FALSE;
>> +            break;
>> +        case CHAR_TYPE:
>> +            value = new Character(in.readChar());
>> +            break;
>> +        case SHORT_TYPE:
>> +            value = new Short(in.readShort());
>> +            break;
>> +        case INTEGER_TYPE:
>> +            value = new Integer(in.readInt());
>> +            break;
>> +        case LONG_TYPE:
>> +            value = new Long(in.readLong());
>> +            break;
>> +        case FLOAT_TYPE:
>> +            value = new Float(in.readFloat());
>> +            break;
>> +        case DOUBLE_TYPE:
>> +            value = new Double(in.readDouble());
>> +            break;
>> +        case BYTE_ARRAY_TYPE:
>> +            value = new byte[in.readInt()];
>> +            in.readFully((byte[])value);
>> +            break;
>> +        case STRING_TYPE:
>> +            value = in.readUTF();
>> +            break;
>> +        case BIG_STRING_TYPE:
>> +            value = readUTF8(in);
>> +            break;
>> +        case MAP_TYPE:
>> +            value = unmarshalPrimitiveMap(in);
>> +            break;
>> +        case LIST_TYPE:
>> +            value = unmarshalPrimitiveList(in);
>> +            break;
>> +        }
>> +        return value;
>> +    }
>> +
>> +    static public void writeUTF8(DataOutput dataOut, String text)
>> throws IOException {
>> +        if (text != null) {
>> +            int strlen = text.length();
>> +            int utflen = 0;
>> +            char[] charr = new char[strlen];
>> +            int c, count = 0;
>> +
>> +            text.getChars(0, strlen, charr, 0);
>> +
>> +            for (int i = 0; i < strlen; i++) {
>> +                c = charr[i];
>> +                if ((c >= 0x0001) && (c <= 0x007F)) {
>> +                    utflen++;
>> +                } else if (c > 0x07FF) {
>> +                    utflen += 3;
>> +                } else {
>> +                    utflen += 2;
>> +                }
>> +            }
>> +            //TODO diff: Sun code - removed
>> +            byte[] bytearr = new byte[utflen + 4]; //TODO diff: Sun code
>> +            bytearr[count++] = (byte) ((utflen >>> 24) & 0xFF);
>> //TODO diff: Sun code
>> +            bytearr[count++] = (byte) ((utflen >>> 16) & 0xFF);
>> //TODO diff: Sun code
>> +            bytearr[count++] = (byte) ((utflen >>> 8) & 0xFF);
>> +            bytearr[count++] = (byte) ((utflen >>> 0) & 0xFF);
>> +            for (int i = 0; i < strlen; i++) {
>> +                c = charr[i];
>> +                if ((c >= 0x0001) && (c <= 0x007F)) {
>> +                    bytearr[count++] = (byte) c;
>> +                } else if (c > 0x07FF) {
>> +                    bytearr[count++] = (byte) (0xE0 | ((c >> 12) &
>> 0x0F));
>> +                    bytearr[count++] = (byte) (0x80 | ((c >> 6) &
>> 0x3F));
>> +                    bytearr[count++] = (byte) (0x80 | ((c >> 0) &
>> 0x3F));
>> +                } else {
>> +                    bytearr[count++] = (byte) (0xC0 | ((c >> 6) &
>> 0x1F));
>> +                    bytearr[count++] = (byte) (0x80 | ((c >> 0) &
>> 0x3F));
>> +                }
>> +            }
>> +            dataOut.write(bytearr);
>> +
>> +        } else {
>> +            dataOut.writeInt(-1);
>> +        }
>> +    }
>> +
>> +    static public String readUTF8(DataInput dataIn) throws IOException {
>> +        int utflen = dataIn.readInt(); //TODO diff: Sun code
>> +        if (utflen > -1) {
>> +            StringBuffer str = new StringBuffer(utflen);
>> +            byte bytearr[] = new byte[utflen];
>> +            int c, char2, char3;
>> +            int count = 0;
>> +
>> +            dataIn.readFully(bytearr, 0, utflen);
>> +
>> +            while (count < utflen) {
>> +                c = bytearr[count] & 0xff;
>> +                switch (c >> 4) {
>> +                    case 0:
>> +                    case 1:
>> +                    case 2:
>> +                    case 3:
>> +                    case 4:
>> +                    case 5:
>> +                    case 6:
>> +                    case 7:
>> +                        /* 0xxxxxxx */
>> +                        count++;
>> +                        str.append((char) c);
>> +                        break;
>> +                    case 12:
>> +                    case 13:
>> +                        /* 110x xxxx 10xx xxxx */
>> +                        count += 2;
>> +                        if (count > utflen) {
>> +                            throw new UTFDataFormatException();
>> +                        }
>> +                        char2 = bytearr[count - 1];
>> +                        if ((char2 & 0xC0) != 0x80) {
>> +                            throw new UTFDataFormatException();
>> +                        }
>> +                        str.append((char) (((c & 0x1F) << 6) | (char2
>> & 0x3F)));
>> +                        break;
>> +                    case 14:
>> +                        /* 1110 xxxx 10xx xxxx 10xx xxxx */
>> +                        count += 3;
>> +                        if (count > utflen) {
>> +                            throw new UTFDataFormatException();
>> +                        }
>> +                        char2 = bytearr[count - 2]; //TODO diff: Sun
>> code
>> +                        char3 = bytearr[count - 1]; //TODO diff: Sun
>> code
>> +                        if (((char2 & 0xC0) != 0x80) || ((char3 &
>> 0xC0) != 0x80)) {
>> +                            throw new UTFDataFormatException();
>> +                        }
>> +                        str.append((char) (((c & 0x0F) << 12) |
>> ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)));
>> +                        break;
>> +                    default :
>> +                        /* 10xx xxxx, 1111 xxxx */
>> +                        throw new UTFDataFormatException();
>> +                }
>> +            }
>> +            // The number of chars produced may be less than utflen
>> +            return new String(str);
>> +        } else {
>> +            return null;
>> +        }
>> +    }
>> +
>> +
>> +}
>> +
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/MarshallingSupport.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:eol-style = native
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/MarshallingSupport.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:keywords = Date Revision
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/MarshallingSupport.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:mime-type = text/plain
>>
>> Added:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceStopper.java
>>
>> URL:
>> http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceStopper.java?view=auto&rev=446519
>>
>> ==============================================================================
>>
>> ---
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceStopper.java
>> (added)
>> +++
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceStopper.java
>> Thu Sep 14 21:57:24 2006
>> @@ -0,0 +1,97 @@
>> +package org.apache.geronimo.openwire.util;
>> +
>> +import org.apache.geronimo.openwire.Service;
>> +import org.apache.commons.logging.LogFactory;
>> +import org.apache.commons.logging.Log;
>> +
>> +import java.util.Iterator;
>> +import java.util.List;
>> +
>> +/**
>> + * Copyright 2006 The Apache Software Foundation
>> + * <p/>
>> + * Licensed under the Apache License, Version 2.0 (the "License");
>> + * you may not use this file except in compliance with the License.
>> + * You may obtain a copy of the License at
>> + * <p/>
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + * <p/>
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +public class ServiceStopper {
>> +    private Throwable firstException;
>> +
>> +     /**
>> +      * Stops the given service, catching any exceptions that are
>> thrown.
>> +      */
>> +     public void stop(Service service) {
>> +         try {
>> +             if( service!=null ) {
>> +                 service.stop();
>> +             }
>> +         }
>> +         catch (Exception e) {
>> +             onException(service, e);
>> +         }
>> +     }
>> +
>> +     /**
>> +      * Performs the given code to stop some service handling the
>> exceptions
>> +      * which may be thrown properly
>> +      */
>> +     public void run(Callback stopClosure) {
>> +         try {
>> +             stopClosure.execute();
>> +         }
>> +         catch (Throwable e) {
>> +             onException(stopClosure, e);
>> +         }
>> +     }
>> +
>> +     /**
>> +      * Stops a list of services
>> +      */
>> +     public void stopServices(List services) {
>> +         for (Iterator iter = services.iterator(); iter.hasNext();) {
>> +             Service service = (Service) iter.next();
>> +             stop(service);
>> +         }
>> +     }
>> +
>> +     public void onException(Object owner, Throwable e) {
>> +         logError(owner, e);
>> +         if (firstException == null) {
>> +             firstException = e;
>> +         }
>> +     }
>> +
>> +     /**
>> +      * Throws the first exception that was thrown if there was one.
>> +      */
>> +     public void throwFirstException() throws Exception {
>> +         if (firstException != null) {
>> +             if (firstException instanceof Exception) {
>> +                 Exception e = (Exception) firstException;
>> +                 throw e;
>> +             }
>> +             else if (firstException instanceof RuntimeException) {
>> +                 RuntimeException e = (RuntimeException) firstException;
>> +                 throw e;
>> +             }
>> +             else {
>> +                 throw new RuntimeException("Unknown type of
>> exception: " + firstException, firstException);
>> +             }
>> +         }
>> +     }
>> +
>> +     protected void logError(Object service, Throwable e) {
>> +         Log log = LogFactory.getLog(service.getClass());
>> +         log.error("Could not stop service: " + service + ". Reason:
>> " + e, e);
>> +     }
>> +
>> +
>> +}
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceStopper.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:eol-style = native
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceStopper.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:keywords = Date Revision
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceStopper.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:mime-type = text/plain
>>
>> Added:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceSupport.java
>>
>> URL:
>> http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceSupport.java?view=auto&rev=446519
>>
>> ==============================================================================
>>
>> ---
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceSupport.java
>> (added)
>> +++
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceSupport.java
>> Thu Sep 14 21:57:24 2006
>> @@ -0,0 +1,88 @@
>> +package org.apache.geronimo.openwire.util;
>> +
>> +import
>> edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicBoolean;
>> +import org.apache.geronimo.openwire.Service;
>> +import org.apache.commons.logging.Log;
>> +import org.apache.commons.logging.LogFactory;
>> +
>> +/**
>> + * Copyright 2006 The Apache Software Foundation
>> + * <p/>
>> + * Licensed under the Apache License, Version 2.0 (the "License");
>> + * you may not use this file except in compliance with the License.
>> + * You may obtain a copy of the License at
>> + * <p/>
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + * <p/>
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +public abstract class ServiceSupport implements Service {
>> +    private static final Log log =
>> LogFactory.getLog(ServiceSupport.class);
>> +
>> +    private AtomicBoolean started = new AtomicBoolean(false);
>> +    private AtomicBoolean stopping = new AtomicBoolean(false);
>> +    private AtomicBoolean stopped = new AtomicBoolean(false);
>> +
>> +    public static void dispose(Service service) {
>> +        try {
>> +            service.stop();
>> +        }
>> +        catch (Exception e) {
>> +            log.debug("Could not stop service: " + service + ".
>> Reason: " + e, e);
>> +        }
>> +    }
>> +
>> +    public void start() throws Exception {
>> +        if (started.compareAndSet(false, true)) {
>> +            doStart();
>> +        }
>> +    }
>> +
>> +    public void stop() throws Exception {
>> +        if (stopped.compareAndSet(false, true)) {
>> +            stopping.set(true);
>> +            ServiceStopper stopper = new ServiceStopper();
>> +            try {
>> +                doStop(stopper);
>> +            }
>> +            catch (Exception e) {
>> +                stopper.onException(this, e);
>> +            }
>> +            stopped.set(true);
>> +            started.set(false);
>> +            stopping.set(false);
>> +            stopper.throwFirstException();
>> +        }
>> +    }
>> +
>> +    /**
>> +     * @return true if this service has been started
>> +     */
>> +    public boolean isStarted() {
>> +        return started.get();
>> +    }
>> +
>> +    /**
>> +     * @return true if this service is in the process of closing
>> +     */
>> +    public boolean isStopping() {
>> +        return stopping.get();
>> +    }
>> +
>> +
>> +    /**
>> +     * @return true if this service is closed
>> +     */
>> +    public boolean isStopped() {
>> +        return stopped.get();
>> +    }
>> +
>> +    protected abstract void doStop(ServiceStopper stopper) throws
>> Exception;
>> +
>> +    protected abstract void doStart() throws Exception;
>> +}
>> +
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceSupport.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:eol-style = native
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceSupport.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:keywords = Date Revision
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/ServiceSupport.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:mime-type = text/plain
>>
>> Added:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/URISupport.java
>>
>> URL:
>> http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/URISupport.java?view=auto&rev=446519
>>
>> ==============================================================================
>>
>> ---
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/URISupport.java
>> (added)
>> +++
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/URISupport.java
>> Thu Sep 14 21:57:24 2006
>> @@ -0,0 +1,295 @@
>> +package org.apache.geronimo.openwire.util;
>> +
>> +import java.net.URI;
>> +import java.net.URISyntaxException;
>> +import java.net.URLDecoder;
>> +import java.net.URLEncoder;
>> +import java.util.*;
>> +import java.io.UnsupportedEncodingException;
>> +
>> +/**
>> + * Copyright 2006 The Apache Software Foundation
>> + * <p/>
>> + * Licensed under the Apache License, Version 2.0 (the "License");
>> + * you may not use this file except in compliance with the License.
>> + * You may obtain a copy of the License at
>> + * <p/>
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + * <p/>
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +public class URISupport {
>> +
>> +    public static class CompositeData {
>> +        String scheme;
>> +        String path;
>> +        URI components[];
>> +        Map parameters;
>> +        String fragment;
>> +        public String host;
>> +
>> +        public URI[] getComponents() {
>> +            return components;
>> +        }
>> +        public String getFragment() {
>> +            return fragment;
>> +        }
>> +        public Map getParameters() {
>> +            return parameters;
>> +        }
>> +        public String getScheme() {
>> +            return scheme;
>> +        }
>> +        public String getPath() {
>> +            return path;
>> +        }
>> +        public String getHost() {
>> +            return host;
>> +        }
>> +
>> +        public URI toURI() throws URISyntaxException {
>> +            StringBuffer sb = new StringBuffer();
>> +            if( scheme!=null ) {
>> +                sb.append(scheme);
>> +                sb.append(':');
>> +            }
>> +
>> +            if( host!=null && host.length()!=0 ) {
>> +                sb.append(host);
>> +            } else {
>> +                sb.append('(');
>> +                for (int i = 0; i < components.length; i++) {
>> +                    if( i!=0 )
>> +                        sb.append(',');
>> +                    sb.append(components[i].toString());
>> +                }
>> +                sb.append(')');
>> +            }
>> +
>> +            if( path !=null ) {
>> +                sb.append('/');
>> +                sb.append(path);
>> +            }
>> +            if(!parameters.isEmpty()) {
>> +                sb.append("?");
>> +                sb.append(createQueryString(parameters));
>> +            }
>> +            if( fragment!=null ) {
>> +                sb.append("#");
>> +                sb.append(fragment);
>> +            }
>> +            return new URI(sb.toString());
>> +        }
>> +    }
>> +
>> +    public static Map parseQuery(String uri) throws URISyntaxException{
>> +        try{
>> +            Map rc=new HashMap();
>> +            if(uri!=null){
>> +                String[] parameters=uri.split("&");
>> +                for(int i=0;i<parameters.length;i++){
>> +                    int p=parameters[i].indexOf("=");
>> +                    if(p>=0){
>> +                        String name=
>> URLDecoder.decode(parameters[i].substring(0,p),"UTF-8");
>> +                        String
>> value=URLDecoder.decode(parameters[i].substring(p+1),"UTF-8");
>> +                        rc.put(name,value);
>> +                    }else{
>> +                        rc.put(parameters[i],null);
>> +                    }
>> +                }
>> +            }
>> +            return rc;
>> +        }catch(UnsupportedEncodingException e){
>> +            throw (URISyntaxException) new
>> URISyntaxException(e.toString(),"Invalid encoding").initCause(e);
>> +        }
>> +    }
>> +
>> +    public static Map parseParamters(URI uri) throws
>> URISyntaxException {
>> +        return uri.getQuery()==null ? Collections.EMPTY_MAP :
>> parseQuery(stripPrefix(uri.getQuery(), "?"));
>> +    }
>> +
>> +    /**
>> +     * Removes any URI query from the given uri
>> +     */
>> +    public static URI removeQuery(URI uri) throws URISyntaxException {
>> +        return createURIWithQuery(uri, null);
>> +    }
>> +
>> +    /**
>> +     * Creates a URI with the given query
>> +     */
>> +    public static URI createURIWithQuery(URI uri, String query)
>> throws URISyntaxException {
>> +        return new URI(uri.getScheme(), uri.getUserInfo(),
>> uri.getHost(), uri.getPort(), uri.getPath(), query, uri.getFragment());
>> +    }
>> +
>> +    public static CompositeData parseComposite(URI uri) throws
>> URISyntaxException {
>> +
>> +        CompositeData rc = new CompositeData();
>> +        rc.scheme = uri.getScheme();
>> +        String ssp = stripPrefix(uri.getSchemeSpecificPart().trim(),
>> "//").trim();
>> +
>> +        parseComposite(uri, rc, ssp);
>> +
>> +        rc.fragment = uri.getFragment();
>> +        return rc;
>> +    }
>> +
>> +    private static void parseComposite(URI uri, CompositeData rc,
>> String ssp) throws URISyntaxException {
>> +        String componentString;
>> +        String params;
>> +
>> +        if(!checkParenthesis(ssp)){
>> +            throw new URISyntaxException(uri.toString(), "Not a
>> matching number of '(' and ')' parenthesis");
>> +        }
>> +
>> +        int p;
>> +        int intialParen = ssp.indexOf("(");
>> +        if( intialParen==0 ) {
>> +            rc.host = ssp.substring(0, intialParen);
>> +            p = rc.host.indexOf("/");
>> +            if( p >= 0 ) {
>> +                rc.path = rc.host.substring(p);
>> +                rc.host = rc.host.substring(0,p);
>> +            }
>> +            p = ssp.lastIndexOf(")");
>> +            componentString = ssp.substring(intialParen+1,p);
>> +            params = ssp.substring(p+1).trim();
>> +
>> +        } else {
>> +            componentString = ssp;
>> +            params="";
>> +        }
>> +
>> +        String components[] = splitComponents(componentString);
>> +        rc.components=new URI[components.length];
>> +        for (int i = 0; i < components.length; i++) {
>> +            rc.components[i] = new URI(components[i].trim());
>> +        }
>> +
>> +        p = params.indexOf("?");
>> +        if( p >= 0 ) {
>> +            if( p > 0) {
>> +                rc.path = stripPrefix(params.substring(0, p), "/");
>> +            }
>> +            rc.parameters = parseQuery(params.substring(p+1));
>> +        } else {
>> +            if( params.length() > 0 )
>> +                rc.path = stripPrefix(params, "/");
>> +            rc.parameters = Collections.EMPTY_MAP;
>> +        }
>> +    }
>> +
>> +    private static String[] splitComponents(String str) {
>> +        ArrayList l = new ArrayList();
>> +
>> +        int last=0;
>> +        int depth = 0;
>> +        char chars[] = str.toCharArray();
>> +        for( int i=0; i < chars.length; i ++ ) {
>> +            switch( chars[i] ) {
>> +            case '(':
>> +                depth++;
>> +                break;
>> +            case ')':
>> +                depth--;
>> +                break;
>> +            case ',':
>> +                if( depth == 0 ) {
>> +                    String s = str.substring(last, i);
>> +                    l.add(s);
>> +                    last=i+1;
>> +                }
>> +            }
>> +        }
>> +
>> +        String s = str.substring(last);
>> +        if( s.length() !=0 )
>> +            l.add(s);
>> +
>> +        String rc[] = new String[l.size()];
>> +        l.toArray(rc);
>> +        return rc;
>> +    }
>> +
>> +    public static String stripPrefix(String value, String prefix) {
>> +        if( value.startsWith(prefix) )
>> +            return value.substring(prefix.length());
>> +        return value;
>> +    }
>> +
>> +    public static URI stripScheme(URI uri) throws URISyntaxException {
>> +        return new
>> URI(stripPrefix(uri.getSchemeSpecificPart().trim(), "//"));
>> +    }
>> +
>> +    public static String createQueryString(Map options) throws
>> URISyntaxException {
>> +        try {
>> +            if(options.size()>0) {
>> +                StringBuffer rc = new StringBuffer();
>> +                boolean first=true;
>> +                for (Iterator iter = options.keySet().iterator();
>> iter.hasNext();) {
>> +                    if( first )
>> +                        first=false;
>> +                    else
>> +                        rc.append("&");
>> +
>> +                    String key = (String) iter.next();
>> +                    String value = (String)options.get(key);
>> +                    rc.append(URLEncoder.encode(key, "UTF-8"));
>> +                    rc.append("=");
>> +                    rc.append(URLEncoder.encode(value, "UTF-8"));
>> +                }
>> +                return rc.toString();
>> +            } else {
>> +                return "";
>> +            }
>> +        } catch (UnsupportedEncodingException e) {
>> +            throw (URISyntaxException)new
>> URISyntaxException(e.toString(), "Invalid encoding").initCause(e);
>> +        }
>> +    }
>> +
>> +    /**
>> +     * Creates a URI from the original URI and the remaining paramaters
>> +     * @throws URISyntaxException
>> +     */
>> +    public static URI createRemainingURI(URI originalURI, Map params)
>> throws URISyntaxException {
>> +        String s = createQueryString(params);
>> +        if( s.length()==0 )
>> +            s = null;
>> +        return createURIWithQuery(originalURI, s);
>> +    }
>> +
>> +    static public URI changeScheme(URI bindAddr, String scheme)
>> throws URISyntaxException {
>> +        return new URI(scheme, bindAddr.getUserInfo(),
>> bindAddr.getHost(), bindAddr.getPort(), bindAddr.getPath(),
>> bindAddr.getQuery(), bindAddr.getFragment());
>> +    }
>> +
>> +    public static boolean checkParenthesis(String str){
>> +        boolean result=true;
>> +        if(str!=null){
>> +            int open=0;
>> +            int closed=0;
>> +
>> +            int i=0;
>> +            while((i=str.indexOf('(',i)) >=0 ){
>> +                i++;
>> +                open++;
>> +            }
>> +            i=0;
>> +            while((i=str.indexOf(')',i)) >=0 ){
>> +                i++;
>> +                closed++;
>> +            }
>> +            result = open == closed;
>> +        }
>> +        return result;
>> +    }
>> +
>> +    public int indexOfParenthesisMatch(String str){
>> +        int result = -1;
>> +
>> +        return result;
>> +    }
>> +}
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/URISupport.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:eol-style = native
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/URISupport.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:keywords = Date Revision
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/util/URISupport.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:mime-type = text/plain
>>
>> Added:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/ObjectStreamWireFormat.java
>>
>> URL:
>> http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/ObjectStreamWireFormat.java?view=auto&rev=446519
>>
>> ==============================================================================
>>
>> ---
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/ObjectStreamWireFormat.java
>> (added)
>> +++
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/ObjectStreamWireFormat.java
>> Thu Sep 14 21:57:24 2006
>> @@ -0,0 +1,75 @@
>> +/**
>> + *
>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>> + * contributor license agreements.  See the NOTICE file distributed with
>> + * this work for additional information regarding copyright ownership.
>> + * The ASF licenses this file to You under the Apache License,
>> Version 2.0
>> + * (the "License"); you may not use this file except in compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +package org.apache.geronimo.openwire.wireformat;
>> +
>> +import java.io.DataInputStream;
>> +import java.io.DataOutputStream;
>> +import java.io.IOException;
>> +import java.io.ObjectOutputStream;
>> +
>> +import org.apache.geronimo.openwire.util.ByteSequence;
>> +import org.apache.geronimo.openwire.util.ByteArrayOutputStream;
>> +import org.apache.geronimo.openwire.util.ByteArrayInputStream;
>> +import
>> org.apache.geronimo.openwire.util.ClassLoadingAwareObjectInputStream;
>> +
>> +/**
>> + * A simple implementation which uses Object Stream serialization.
>> + *
>> + * @version $Revision$
>> + */
>> +public class ObjectStreamWireFormat implements WireFormat {
>> +
>> +    public ByteSequence marshal(Object command) throws IOException {
>> +        ByteArrayOutputStream baos = new ByteArrayOutputStream();
>> +        DataOutputStream ds = new DataOutputStream(baos);
>> +        marshal(command, ds);
>> +        ds.close();
>> +        return baos.toByteSequence();
>> +    }
>> +
>> +    public Object unmarshal(ByteSequence packet) throws IOException {
>> +        return unmarshal(new DataInputStream(new
>> ByteArrayInputStream(packet)));
>> +    }
>> +
>> +    public void marshal(Object command, DataOutputStream ds) throws
>> IOException {
>> +        ObjectOutputStream out = new ObjectOutputStream(ds);
>> +        out.writeObject(command);
>> +        out.flush();
>> +        out.reset();
>> +    }
>> +
>> +    public Object unmarshal(DataInputStream ds) throws IOException {
>> +        try {
>> +            ClassLoadingAwareObjectInputStream in = new
>> ClassLoadingAwareObjectInputStream(ds);
>> +            Object command;
>> +            command = in.readObject();
>> +            in.close();
>> +            return command;
>> +        } catch (ClassNotFoundException e) {
>> +            throw (IOException)new IOException("unmarshal failed:
>> "+e).initCause(e);
>> +        }
>> +    }
>> +
>> +    public void setVersion(int version) {
>> +    }
>> +
>> +    public int getVersion() {
>> +        return 0;
>> +    }
>> +
>> +}
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/ObjectStreamWireFormat.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:eol-style = native
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/ObjectStreamWireFormat.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:keywords = Date Revision
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/ObjectStreamWireFormat.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:mime-type = text/plain
>>
>> Added:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormat.java
>>
>> URL:
>> http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormat.java?view=auto&rev=446519
>>
>> ==============================================================================
>>
>> ---
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormat.java
>> (added)
>> +++
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormat.java
>> Thu Sep 14 21:57:24 2006
>> @@ -0,0 +1,65 @@
>> +/**
>> + *
>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>> + * contributor license agreements.  See the NOTICE file distributed with
>> + * this work for additional information regarding copyright ownership.
>> + * The ASF licenses this file to You under the Apache License,
>> Version 2.0
>> + * (the "License"); you may not use this file except in compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +package org.apache.geronimo.openwire.wireformat;
>> +
>> +import java.io.DataInputStream;
>> +import java.io.DataOutputStream;
>> +import java.io.IOException;
>> +
>> +import org.apache.geronimo.openwire.util.ByteSequence;
>> +
>> +
>> +/**
>> + * Provides a mechanism to marshal commands into and out of packets
>> + * or into and out of streams, Channels and Datagrams.
>> + *
>> + * @version $Revision$
>> + */
>> +public interface WireFormat {
>> +
>> +    /**
>> +     * Packet based marshaling
>> +     */
>> +    ByteSequence marshal(Object command) throws IOException;
>> +
>> +    /**
>> +     * Packet based un-marshaling
>> +     */
>> +    Object unmarshal(ByteSequence packet) throws IOException;
>> +
>> +    /**
>> +     * Stream based marshaling
>> +     */
>> +    void marshal(Object command, DataOutputStream out) throws
>> IOException;
>> +
>> +    /**
>> +     * Packet based un-marshaling
>> +     */
>> +    Object unmarshal(DataInputStream in) throws IOException;
>> +
>> +    /**
>> +     * @param version - the version of the wire format
>> +     */
>> +    public void setVersion(int version);
>> +
>> +    /**
>> +     * @return the version of the wire format
>> +     */
>> +    public int getVersion();
>> +
>> +}
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormat.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:eol-style = native
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormat.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:keywords = Date Revision
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormat.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:mime-type = text/plain
>>
>> Added:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormatFactory.java
>>
>> URL:
>> http://svn.apache.org/viewvc/geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormatFactory.java?view=auto&rev=446519
>>
>> ==============================================================================
>>
>> ---
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormatFactory.java
>> (added)
>> +++
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormatFactory.java
>> Thu Sep 14 21:57:24 2006
>> @@ -0,0 +1,22 @@
>> +/**
>> + *
>> + * Licensed to the Apache Software Foundation (ASF) under one or more
>> + * contributor license agreements.  See the NOTICE file distributed with
>> + * this work for additional information regarding copyright ownership.
>> + * The ASF licenses this file to You under the Apache License,
>> Version 2.0
>> + * (the "License"); you may not use this file except in compliance with
>> + * the License.  You may obtain a copy of the License at
>> + *
>> + * http://www.apache.org/licenses/LICENSE-2.0
>> + *
>> + * Unless required by applicable law or agreed to in writing, software
>> + * distributed under the License is distributed on an "AS IS" BASIS,
>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> + * See the License for the specific language governing permissions and
>> + * limitations under the License.
>> + */
>> +package org.apache.geronimo.openwire.wireformat;
>> +
>> +public interface WireFormatFactory {
>> +    WireFormat createWireFormat();
>> +}
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormatFactory.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:eol-style = native
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormatFactory.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:keywords = Date Revision
>>
>> Propchange:
>> geronimo/sandbox/gcache/openwire/src/main/java/org/apache/geronimo/openwire/wireformat/WireFormatFactory.java
>>
>> ------------------------------------------------------------------------------
>>
>>     svn:mime-type = text/plain
>>
>> Modified: geronimo/sandbox/gcache/pom.xml
>> URL:
>> http://svn.apache.org/viewvc/geronimo/sandbox/gcache/pom.xml?view=diff&rev=446519&r1=446518&r2=446519
>>
>> ==============================================================================
>>
>> --- geronimo/sandbox/gcache/pom.xml (original)
>> +++ geronimo/sandbox/gcache/pom.xml Thu Sep 14 21:57:24 2006
>> @@ -17,6 +17,7 @@
>>      </scm>
>>
>>      <modules>
>> +        <module>openwire</module>
>>          <module>client</module>
>>          <module>server</module>
>>      </modules>
>> @@ -42,6 +43,12 @@
>>                  <groupId>backport-util-concurrent</groupId>
>>                  <artifactId>backport-util-concurrent</artifactId>
>>                  <version>2.0_01_pd</version>
>> +            </dependency>
>> +
>> +            <dependency>
>> +                <groupId>commons-logging</groupId>
>> +                <artifactId>commons-logging</artifactId>
>> +                <version>1.0.4</version>
>>              </dependency>
>>
>>              <dependency>
>>
>>

Mime
View raw message