You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by js...@apache.org on 2014/05/08 02:56:58 UTC
[2/2] git commit: AMBARI-5708. stacks api returning invalid href's
after endpoint renaming
AMBARI-5708. stacks api returning invalid href's after endpoint renaming
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f8d06b4c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f8d06b4c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f8d06b4c
Branch: refs/heads/trunk
Commit: f8d06b4c7c6a810c2a4b58065895c6c78f4c2c3b
Parents: b23ebd4
Author: John Speidel <js...@hortonworks.com>
Authored: Wed May 7 20:38:42 2014 -0400
Committer: John Speidel <js...@hortonworks.com>
Committed: Wed May 7 20:55:10 2014 -0400
----------------------------------------------------------------------
.../resources/BaseStacksResourceDefinition.java | 62 +++++++++++++++
.../OperatingSystemResourceDefinition.java | 2 +-
.../StackConfigurationResourceDefinition.java | 3 +-
.../StackDependencyResourceDefinition.java | 2 +-
...StackServiceComponentResourceDefinition.java | 3 +-
.../StackServiceResourceDefinition.java | 2 +-
.../StackVersionResourceDefinition.java | 2 +-
.../BaseStacksResourceDefinitionTest.java | 82 ++++++++++++++++++++
8 files changed, 150 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/f8d06b4c/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseStacksResourceDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseStacksResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseStacksResourceDefinition.java
new file mode 100644
index 0000000..63b1ca7
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/BaseStacksResourceDefinition.java
@@ -0,0 +1,62 @@
+/**
+ * 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.ambari.server.api.resources;
+
+import org.apache.ambari.server.api.services.Request;
+import org.apache.ambari.server.api.util.TreeNode;
+import org.apache.ambari.server.controller.spi.Resource;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Abstract base class for all stacks related resource definitions.
+ * Because we cloned /stacks from /stacks2 and changed the endpoint names in stacks,
+ * this class is a temporary mechanism to deviate from the standard /stacks2 endpoint names.
+ *
+ */
+public abstract class BaseStacksResourceDefinition extends BaseResourceDefinition {
+ protected BaseStacksResourceDefinition(Resource.Type resourceType) {
+ super(resourceType);
+ }
+
+ @Override
+ public List<PostProcessor> getPostProcessors() {
+ return Collections.<PostProcessor>singletonList(new StacksHrefProcessor());
+ }
+
+ private class StacksHrefProcessor extends BaseHrefPostProcessor {
+ @Override
+ /**
+ * If processing a /stacks endpoint, replace the endpoint names.
+ */
+ public void process(Request request, TreeNode<Resource> resultNode, String href) {
+ super.process(request, resultNode, href);
+
+ String nodeHref = resultNode.getProperty("href");
+ if (nodeHref != null && nodeHref.contains("/stacks/")) {
+ nodeHref = nodeHref.replace("stackServices", "services");
+ nodeHref = nodeHref.replace("serviceComponents", "components");
+ nodeHref = nodeHref.replace("operatingSystems", "operating_systems");
+ }
+
+ resultNode.setProperty("href", nodeHref);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f8d06b4c/ambari-server/src/main/java/org/apache/ambari/server/api/resources/OperatingSystemResourceDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/OperatingSystemResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/OperatingSystemResourceDefinition.java
index b9c85ec..6faf6fb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/OperatingSystemResourceDefinition.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/OperatingSystemResourceDefinition.java
@@ -24,7 +24,7 @@ import java.util.Set;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.Resource.Type;
-public class OperatingSystemResourceDefinition extends BaseResourceDefinition {
+public class OperatingSystemResourceDefinition extends BaseStacksResourceDefinition {
public OperatingSystemResourceDefinition(Type resourceType) {
super(resourceType);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f8d06b4c/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackConfigurationResourceDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackConfigurationResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackConfigurationResourceDefinition.java
index 222ff42..53903ba 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackConfigurationResourceDefinition.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackConfigurationResourceDefinition.java
@@ -22,8 +22,7 @@ package org.apache.ambari.server.api.resources;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.Resource.Type;
-public class StackConfigurationResourceDefinition extends
- BaseResourceDefinition {
+public class StackConfigurationResourceDefinition extends BaseStacksResourceDefinition {
public StackConfigurationResourceDefinition(Type resourceType) {
super(resourceType);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f8d06b4c/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackDependencyResourceDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackDependencyResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackDependencyResourceDefinition.java
index 19ac584..0743a7f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackDependencyResourceDefinition.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackDependencyResourceDefinition.java
@@ -23,7 +23,7 @@ import org.apache.ambari.server.controller.spi.Resource;
/**
* Stack Service Dependency Resource Definition.
*/
-public class StackDependencyResourceDefinition extends BaseResourceDefinition {
+public class StackDependencyResourceDefinition extends BaseStacksResourceDefinition {
/**
* Constructor.
http://git-wip-us.apache.org/repos/asf/ambari/blob/f8d06b4c/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackServiceComponentResourceDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackServiceComponentResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackServiceComponentResourceDefinition.java
index 00620e9..cad2a99 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackServiceComponentResourceDefinition.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackServiceComponentResourceDefinition.java
@@ -23,8 +23,7 @@ import org.apache.ambari.server.controller.spi.Resource;
import java.util.Collections;
import java.util.Set;
-public class StackServiceComponentResourceDefinition extends
- BaseResourceDefinition {
+public class StackServiceComponentResourceDefinition extends BaseStacksResourceDefinition {
public StackServiceComponentResourceDefinition() {
super(Resource.Type.StackServiceComponent);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f8d06b4c/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackServiceResourceDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackServiceResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackServiceResourceDefinition.java
index 0c8f4f9..cb1dfb1 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackServiceResourceDefinition.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackServiceResourceDefinition.java
@@ -24,7 +24,7 @@ import java.util.Set;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.Resource.Type;
-public class StackServiceResourceDefinition extends BaseResourceDefinition {
+public class StackServiceResourceDefinition extends BaseStacksResourceDefinition {
public StackServiceResourceDefinition(Type resourceType) {
super(resourceType);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f8d06b4c/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackVersionResourceDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackVersionResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackVersionResourceDefinition.java
index 97f1908..d641e4c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackVersionResourceDefinition.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/StackVersionResourceDefinition.java
@@ -24,7 +24,7 @@ import java.util.Set;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.Resource.Type;
-public class StackVersionResourceDefinition extends BaseResourceDefinition {
+public class StackVersionResourceDefinition extends BaseStacksResourceDefinition {
public StackVersionResourceDefinition(Type resourceType) {
super(Resource.Type.StackVersion);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f8d06b4c/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseStacksResourceDefinitionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseStacksResourceDefinitionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseStacksResourceDefinitionTest.java
new file mode 100644
index 0000000..b235876
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/resources/BaseStacksResourceDefinitionTest.java
@@ -0,0 +1,82 @@
+/**
+ * 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.ambari.server.api.resources;
+
+import org.apache.ambari.server.api.util.TreeNode;
+import org.apache.ambari.server.api.util.TreeNodeImpl;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.junit.Test;
+
+import static junit.framework.Assert.assertEquals;
+
+
+/**
+ * BaseStacksResourceDefinition unit tests
+ */
+public class BaseStacksResourceDefinitionTest {
+
+ @Test
+ public void testHrefCreation() {
+ TestResourceDefinition resourceDefinition = new TestResourceDefinition();
+ ResourceDefinition.PostProcessor processor = resourceDefinition.getPostProcessors().iterator().next();
+
+ TreeNode<Resource> node = new TreeNodeImpl<Resource>(new TreeNodeImpl<Resource>(null, null, null), null, "test");
+
+ String href = "/stacks/HDP/versions/1.3.2/stackServices/foo";
+ processor.process(null, node, href);
+ assertEquals("/stacks/HDP/versions/1.3.2/services/foo", node.getProperty("href"));
+
+ href = "/stacks2/HDP/versions/1.3.2/stackServices/foo";
+ processor.process(null, node, href);
+ assertEquals("/stacks2/HDP/versions/1.3.2/stackServices/foo", node.getProperty("href"));
+
+ href = "/stacks/HDP/versions/1.3.2/stackServices/foo/serviceComponents";
+ processor.process(null, node, href);
+ assertEquals("/stacks/HDP/versions/1.3.2/services/foo/components", node.getProperty("href"));
+
+ href = "/stacks2/HDP/versions/1.3.2/stackServices/foo/serviceComponents";
+ processor.process(null, node, href);
+ assertEquals("/stacks2/HDP/versions/1.3.2/stackServices/foo/serviceComponents", node.getProperty("href"));
+
+ href = "/stacks/HDP/versions/1.3.2/operatingSystems";
+ processor.process(null, node, href);
+ assertEquals("/stacks/HDP/versions/1.3.2/operating_systems", node.getProperty("href"));
+
+ href = "/stacks2/HDP/versions/1.3.2/operatingSystems";
+ processor.process(null, node, href);
+ assertEquals("/stacks2/HDP/versions/1.3.2/operatingSystems", node.getProperty("href"));
+ }
+
+ private class TestResourceDefinition extends BaseStacksResourceDefinition {
+ private TestResourceDefinition() {
+ super(Resource.Type.StackServiceComponent);
+ }
+
+ @Override
+ public String getPluralName() {
+ return "tests";
+ }
+
+ @Override
+ public String getSingularName() {
+ return "test";
+ }
+ }
+}
+