| /* |
| * 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.usergrid.mq; |
| |
| |
| import java.util.Map; |
| import java.util.TreeMap; |
| import java.util.UUID; |
| |
| import org.apache.commons.lang.StringUtils; |
| |
| import org.apache.usergrid.utils.UUIDUtils; |
| |
| import com.fasterxml.jackson.annotation.JsonAnyGetter; |
| import com.fasterxml.jackson.annotation.JsonAnySetter; |
| import com.fasterxml.jackson.annotation.JsonIgnore; |
| |
| import static java.util.UUID.nameUUIDFromBytes; |
| |
| import static org.apache.commons.collections.MapUtils.getBooleanValue; |
| import static org.apache.commons.collections.MapUtils.getByteValue; |
| import static org.apache.commons.collections.MapUtils.getDoubleValue; |
| import static org.apache.commons.collections.MapUtils.getFloatValue; |
| import static org.apache.commons.collections.MapUtils.getIntValue; |
| import static org.apache.commons.collections.MapUtils.getLongValue; |
| import static org.apache.commons.collections.MapUtils.getShortValue; |
| import static org.apache.commons.collections.MapUtils.getString; |
| import static org.apache.usergrid.utils.MapUtils.hashMap; |
| |
| |
| public class Queue { |
| |
| public static final String QUEUE_ID = "uuid"; |
| public static final String QUEUE_PATH = "path"; |
| public static final String QUEUE_CREATED = "created"; |
| public static final String QUEUE_MODIFIED = "modified"; |
| public static final String QUEUE_NEWEST = "newest"; |
| public static final String QUEUE_OLDEST = "oldest"; |
| |
| @SuppressWarnings("rawtypes") |
| public static final Map<String, Class> QUEUE_PROPERTIES = |
| hashMap( QUEUE_PATH, ( Class ) String.class ).map( QUEUE_ID, UUID.class ).map( QUEUE_CREATED, Long.class ) |
| .map( QUEUE_MODIFIED, Long.class ).map( QUEUE_NEWEST, UUID.class ).map( QUEUE_OLDEST, UUID.class ); |
| |
| protected Map<String, Object> properties = new TreeMap<String, Object>( String.CASE_INSENSITIVE_ORDER ); |
| |
| |
| public Queue( String path ) { |
| setPath( path ); |
| } |
| |
| |
| public Queue( Map<String, Object> properties ) { |
| this.properties.putAll( properties ); |
| } |
| |
| |
| @Override |
| public String toString() { |
| return getPath(); |
| } |
| |
| |
| @JsonIgnore |
| public String getPath() { |
| return getString( properties, QUEUE_PATH ); |
| } |
| |
| |
| public void setPath( String path ) { |
| properties.put( QUEUE_PATH, path ); |
| } |
| |
| |
| @JsonIgnore |
| public long getCreated() { |
| return getLongValue( properties, QUEUE_CREATED ); |
| } |
| |
| |
| public void setCreated( long created ) { |
| properties.put( QUEUE_CREATED, created ); |
| } |
| |
| |
| @JsonIgnore |
| public long getModified() { |
| return getLongValue( properties, QUEUE_MODIFIED ); |
| } |
| |
| |
| public void setModified( long modified ) { |
| properties.put( QUEUE_MODIFIED, modified ); |
| } |
| |
| |
| public static Queue getDestination( String path ) { |
| if ( path == null ) { |
| return null; |
| } |
| return new Queue( path ); |
| } |
| |
| |
| @JsonAnySetter |
| public void setProperty( String key, Object value ) { |
| properties.put( key, value ); |
| } |
| |
| |
| @JsonAnyGetter |
| public Map<String, Object> getProperties() { |
| return properties; |
| } |
| |
| |
| public static String[] getQueueParentPaths( String queuePath ) { |
| queuePath = queuePath.toLowerCase().trim(); |
| String[] segments = StringUtils.split( queuePath, '/' ); |
| String[] paths = new String[segments.length + 1]; |
| paths[0] = "/"; |
| for ( int i = 0; i < segments.length; i++ ) { |
| paths[i + 1] = "/" + StringUtils.join( segments, '/', 0, i + 1 ) + "/"; |
| } |
| return paths; |
| } |
| |
| |
| public static String[] getQueuePathSegments( String queuePath ) { |
| queuePath = queuePath.toLowerCase().trim(); |
| String[] segments = StringUtils.split( queuePath, '/' ); |
| return segments; |
| } |
| |
| |
| public static String normalizeQueuePath( String queuePath ) { |
| if ( queuePath == null ) { |
| return null; |
| } |
| queuePath = queuePath.toLowerCase().trim(); |
| if ( queuePath.length() == 0 ) { |
| return null; |
| } |
| queuePath = "/" + StringUtils.join( StringUtils.split( queuePath, '/' ), '/' ); |
| if ( !queuePath.endsWith( "/" ) ) { |
| queuePath += "/"; |
| } |
| return queuePath; |
| } |
| |
| |
| public static UUID getQueueId( String queuePath ) { |
| if ( queuePath == null ) { |
| return null; |
| } |
| // is the queuePath already a UUID? |
| UUID uuid = UUIDUtils.tryGetUUID( queuePath ); |
| if ( uuid != null ) { |
| return uuid; |
| } |
| // UUID queuePath string might have been normalized |
| // look for /00000000-0000-0000-0000-000000000000/ |
| // or /00000000-0000-0000-0000-000000000000 |
| if ( ( queuePath.length() == 38 ) && queuePath.startsWith( "/" ) && queuePath.endsWith( "/" ) ) { |
| uuid = UUIDUtils.tryExtractUUID( queuePath, 1 ); |
| if ( uuid != null ) { |
| return uuid; |
| } |
| } |
| else if ( ( queuePath.length() == 37 ) && queuePath.startsWith( "/" ) ) { |
| uuid = UUIDUtils.tryExtractUUID( queuePath, 1 ); |
| if ( uuid != null ) { |
| return uuid; |
| } |
| } |
| queuePath = normalizeQueuePath( queuePath ); |
| if ( queuePath == null ) { |
| return null; |
| } |
| uuid = nameUUIDFromBytes( queuePath.getBytes() ); |
| return uuid; |
| } |
| |
| |
| @JsonIgnore |
| public UUID getUuid() { |
| return getQueueId( getPath() ); |
| } |
| |
| |
| public float getFloatProperty( String name ) { |
| return getFloatValue( properties, name ); |
| } |
| |
| |
| public void setFloatProperty( String name, float value ) { |
| properties.put( name, value ); |
| } |
| |
| |
| public double getDoubleProperty( String name ) { |
| return getDoubleValue( properties, name ); |
| } |
| |
| |
| public void setDoubleProperty( String name, double value ) { |
| properties.put( name, value ); |
| } |
| |
| |
| public int getIntProperty( String name ) { |
| return getIntValue( properties, name ); |
| } |
| |
| |
| public void setIntProperty( String name, int value ) { |
| properties.put( name, value ); |
| } |
| |
| |
| public long getLongProperty( String name ) { |
| return getLongValue( properties, name ); |
| } |
| |
| |
| public void setLongProperty( String name, long value ) { |
| properties.put( name, value ); |
| } |
| |
| |
| public Object getObjectProperty( String name ) { |
| return properties.get( name ); |
| } |
| |
| |
| public void setObjectProperty( String name, Object value ) { |
| properties.put( name, value ); |
| } |
| |
| |
| public short getShortProperty( String name ) { |
| return getShortValue( properties, name ); |
| } |
| |
| |
| public void setShortProperty( String name, short value ) { |
| properties.put( name, value ); |
| } |
| |
| |
| public String getStringProperty( String name ) { |
| return getString( properties, name ); |
| } |
| |
| |
| public void setStringProperty( String name, String value ) { |
| properties.put( name, value ); |
| } |
| |
| |
| public boolean getBooleanProperty( String name ) { |
| return getBooleanValue( properties, name ); |
| } |
| |
| |
| public void setBooleanProperty( String name, boolean value ) { |
| properties.put( name, value ); |
| } |
| |
| |
| public byte getByteProperty( String name ) { |
| return getByteValue( properties, name ); |
| } |
| |
| |
| public void setByteProperty( String name, byte value ) { |
| properties.put( name, value ); |
| } |
| } |