You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2017/10/13 14:29:21 UTC

[2/5] jena git commit: Convert OperationName to an extensible enum.

Convert OperationName to an extensible enum.


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/fc7beb02
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/fc7beb02
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/fc7beb02

Branch: refs/heads/master
Commit: fc7beb02c3399f58f00b8d3f9f4a6ce5645338e3
Parents: 0475f63
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Oct 12 10:08:29 2017 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Oct 12 10:08:29 2017 +0100

----------------------------------------------------------------------
 .../org/apache/jena/fuseki/mgt/ActionStats.java |  4 +-
 .../apache/jena/fuseki/mgt/JsonDescription.java |  4 +-
 .../jena/fuseki/server/OperationName.java       | 76 ++++++++++++++++----
 3 files changed, 66 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/fc7beb02/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
index fc95331..bc8d2cb 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionStats.java
@@ -108,8 +108,8 @@ public class ActionStats extends ActionContainerItem
                 builder.startObject() ;
                 
                 operationCounters(builder, endpoint);
-                builder.key(JsonConst.operation).value(operName.name()) ;
-                builder.key(JsonConst.description).value(operName.getDescription()) ;
+                builder.key(JsonConst.operation).value(operName.getName()) ;
+                builder.key(JsonConst.description).value(operName.getName()) ;
                 
                 builder.finishObject() ;
             }

http://git-wip-us.apache.org/repos/asf/jena/blob/fc7beb02/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java
index 8f0d939..6113a10 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/JsonDescription.java
@@ -58,8 +58,8 @@ public class JsonDescription {
     private static void describe(JsonBuilder builder, OperationName opName, List<Endpoint> endpoints) {
         builder.startObject() ;
         
-        builder.key(JsonConst.srvType).value(opName.name()) ;
-        builder.key(JsonConst.srvDescription).value(opName.getDescription()) ;
+        builder.key(JsonConst.srvType).value(opName.getName()) ;
+        builder.key(JsonConst.srvDescription).value(opName.getName()) ;
 
         builder.key(JsonConst.srvEndpoints) ;
         builder.startArray() ;

http://git-wip-us.apache.org/repos/asf/jena/blob/fc7beb02/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/OperationName.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/OperationName.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/OperationName.java
index 8cf2c9c..23be8dc 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/OperationName.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/OperationName.java
@@ -18,20 +18,68 @@
 
 package org.apache.jena.fuseki.server;
 
-public enum OperationName {
-    // Fixed names give the codebase some resilience.
-    Query("SPARQL Query"),
-    Update("SPARQL Update"),
-    Upload("File Upload"),
-    GSP_RW("Graph Store Protocol"),
-    GSP_R("Graph Store Protocol (Read)"),
-    Quads_RW("HTTP Quads"),
-    Quads_R("HTTP Quads (Read)")
-    ;
-    
-    private final String description ;
-    private OperationName(String description) { this.description = description ; }
-    public String getDescription() { return description ; }
+import java.util.HashMap;
+import java.util.Map;
+
+/** 
+ * Names (symbols) for operations.
+ * An {@code OperationName} is not related to the service name used to invoke the operation.
+ * That is determined by the {@link Endpoint}. 
+ */
+public class OperationName {
+    
+    // Create intern'ed symbols. 
+    static private Map<String, OperationName> registered = new HashMap<>();
+    
+    /**
+     * Create an intern'ed {@code OperationName}. That is, if the object has already been
+     * created, return the original. There is only ever one object for a given name.
+     * (It is an extensible enum without subclassing).
+     */
+    static public OperationName register(String name) {
+        return registered.computeIfAbsent(name, (n)->new OperationName(n));
+    }
+    
+    public static OperationName Query    = register("SPARQL Query");
+    public static OperationName Update   = register("SPARQL Update");
+    public static OperationName Upload   = register("File Upload");
+    public static OperationName GSP_RW   = register("Graph Store Protocol");
+    public static OperationName GSP_R    = register("Graph Store Protocol (Read)");
+    public static OperationName Quads_RW = register("HTTP Quads");
+    public static OperationName Quads_R  = register("HTTP Quads (Read)");
+    
+    private final String name ;
+    private OperationName(String name) { this.name = name ; }
+    
+    public String getName() { return name ; }
+    
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((name == null) ? 0 : name.hashCode());
+        return result;
+    }
+    
+    // Could be this == obj
+    // because we intern'ed the object
+    
+    @Override
+    public boolean equals(Object obj) {
+        if ( this == obj )
+            return true;
+        if ( obj == null )
+            return false;
+        if ( getClass() != obj.getClass() )
+            return false;
+        OperationName other = (OperationName)obj;
+        if ( name == null ) {
+            if ( other.name != null )
+                return false;
+        } else if ( !name.equals(other.name) )
+            return false;
+        return true;
+    }
     
 }