Received: from rcsinet15.oracle.com (/148.87.113.117)
	by default (Oracle Beehive Gateway v4.0)
	with ESMTP ; Thu, 03 Jun 2010 02:25:22 -0700
Received: from sca-ea-mail-1.sun.com (sca-ea-mail-1.Sun.COM [192.18.43.24])
	by rcsinet15.oracle.com (Switch-3.4.2/Switch-3.4.1) with ESMTP id o539PLr7030889
	(version=TLSv1/SSLv3 cipher=EDH-RSA-DES-CBC3-SHA bits=168 verify=NO)
	for <byron.nevins@oracle.com>; Thu, 3 Jun 2010 09:25:22 GMT
Received: from dm-beehive-02.central.sun.com ([129.147.62.241])
	by sca-ea-mail-1.sun.com (8.13.7+Sun/8.12.9) with ESMTP id o539PLaU008241
	for <byron.nevins@oracle.com>; Thu, 3 Jun 2010 09:25:21 GMT
Received: from dm-sfbay-02.sfbay.sun.com (dm-sfbay-02.SFBay.Sun.COM [129.146.11.31])
	by dm-beehive-02.central.sun.com (8.13.8+Sun/8.13.8/REDIRECT) with ESMTP id o539PKHY036077
	for <bnevins@beehive-redirect.Central.Sun.COM>; Thu, 3 Jun 2010 03:25:20 -0600 (MDT)
Received: from sunmail2sca.sfbay.sun.com (sunmail2sca.SFBay.Sun.COM [129.145.155.234])
	by dm-sfbay-02.sfbay.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.4) with ESMTP id o539PKkC019320
	for <byron.nevins@sfbay.sun.com>; Thu, 3 Jun 2010 02:25:20 -0700 (PDT)
Received: from nwk-avmta-2.sfbay.sun.com (nwk-avmta-2.SFBay.Sun.COM [129.145.155.6])
	by sunmail2sca.sfbay.sun.com (8.13.8+Sun/8.13.8/ENSMAIL,v2.4) with ESMTP id o539PKXE000135
	for <@sunmail2sca.sfbay.sun.com:byron.nevins@sun.com>; Thu, 3 Jun 2010 02:25:20 -0700 (PDT)
Received: from pmxchannel-daemon.nwk-avmta-2.sfbay.sun.com by
 nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 id <0L3F00E05M68CP00@nwk-avmta-2.sfbay.sun.com> for byron.nevins@sun.com
 (ORCPT byron.nevins@sun.com); Thu, 03 Jun 2010 02:25:20 -0700 (PDT)
Received: from brmea-mail-2.sun.com ([192.18.98.43])
 by nwk-avmta-2.sfbay.sun.com
 (Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
 with ESMTP id <0L3F00D49M677910@nwk-avmta-2.sfbay.sun.com> for
 byron.nevins@sun.com (ORCPT byron.nevins@sun.com); Thu,
 03 Jun 2010 02:25:19 -0700 (PDT)
Received: from relay41i.sun.com ([192.5.209.70])
	by brmea-mail-2.sun.com (8.13.6+Sun/8.12.9) with ESMTP id o539PIuv017486	for
 <byron.nevins@sun.com>; Thu, 03 Jun 2010 09:25:18 +0000 (GMT)
Received: from mmp42es.mmp.us.syntegra.com ([160.41.221.11] [160.41.221.11])
 by relay41i.sun.com with ESMTP id BT-MMP-308921 for byron.nevins@sun.com; Thu,
 03 Jun 2010 09:23:18 +0000 (Z)
Received: from relay43i.sun.com (relay43i.sun.com [192.5.209.74])
 by mmp42es.mmp.us.syntegra.com with ESMTP id BT-MMP-188691037 for
 byron.nevins@sun.com; Thu, 03 Jun 2010 09:23:17 +0000 (Z)
Received: from dev.java.net ([208.87.9.178] [208.87.9.178])
 by relay4i.sun.com id BT-MMP-2108592 for byron.nevins@sun.com; Thu,
 03 Jun 2010 09:23:17 +0000 (Z)
Received: (qmail 5044 invoked by uid 5000); Thu, 03 Jun 2010 09:23:16 +0000
Received: (qmail 5031 invoked by uid 5000); Thu, 03 Jun 2010 09:23:15 +0000
Date: Thu, 03 Jun 2010 09:23:15 +0000
From: bnevins@dev.java.net
Subject: svn commit: r37418 -
 trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans
Sender: commits-return-19960-byron.nevins=sun.com@glassfish-svn.dev.java.net
To: commits@glassfish-svn.dev.java.net
Reply-to: commits@glassfish-svn.dev.java.net
Message-id: <20100603092315.5027.qmail@dev.java.net>
MIME-version: 1.0
Content-type: text/plain; charset=UTF-8
Content-transfer-encoding: 7BIT
Precedence: bulk
Delivered-to: mailing list commits@glassfish-svn.dev.java.net
X-PMX-Version: 5.4.1.325704
X-Brightmail-Tracker: AAAAAA==
X-Antispam: No, score=0.0/5.0, scanned in 0.242sec at (localhost [127.0.0.1])
	by smf-spamd v1.3.1 - http://smfs.sf.net/
Mailing-List: contact commits-help@glassfish-svn.dev.java.net; run by ezmlm
List-Post: <mailto:commits@glassfish-svn.dev.java.net>
List-Unsubscribe: <mailto:commits-unsubscribe@glassfish-svn.dev.java.net>
List-Help: <mailto:commits-help@glassfish-svn.dev.java.net>
X-No-Archive: yes
X-Source-IP: sca-ea-mail-1.Sun.COM [192.18.43.24]
X-Auth-Type: Internal IP
X-CT-RefId: str=0001.0A090201.4C077502.0163,ss=1,fgs=0

Author: bnevins
Date: 2010-06-03 09:23:13+0000
New Revision: 37418

Modified:
   trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Cluster.java
   trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Config.java
   trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Domain.java   (contents, props changed)
   trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Server.java

Log:
* Added some helper methods to Domain.  These methods deal with ReferenceContainer's which are clusters and servers.  E.g. you 
can get a list of all ReferenceContainers.  This will help cut down on the ugly boiler-plate code for determining what a target is.

* ReferenceContainers now implement 4 boolean methods that will tell you if it is a Cluster, Server, Instance, DAS
-- These methods can be used to help cast ReferenceContainer to Cluster or Server safely.  They can also be used
to differentiate between DAS and instance.




Modified: trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Cluster.java
Url: https://glassfish-svn.dev.java.net/source/browse/glassfish-svn/trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Cluster.java?view=diff&rev=37418&p1=trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Cluster.java&p2=trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Cluster.java&r1=37417&r2=37418
==============================================================================
--- trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Cluster.java	(original)
+++ trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Cluster.java	2010-06-03 09:23:13+0000
@@ -226,8 +226,30 @@
     @DuckTyped
     List<Server> getInstances();
 
+    // four trivial methods that ReferenceContainer's need to implement
+    @DuckTyped
+    @Override
+    boolean isCluster();
+
+    @DuckTyped
+    @Override
+    boolean isServer();
+
+    @DuckTyped
+    @Override
+    boolean isDas();
+
+    @DuckTyped
+    @Override
+    boolean isInstance();
+
     class Duck {
-        public static String getReference(Cluster cluster) {
+        public static boolean isCluster(Server server) { return true; }
+        public static boolean isServer(Server server)  { return false; }
+        public static boolean isInstance(Server server) { return false; }
+        public static boolean isDas(Server server) { return false; }
+
+            public static String getReference(Cluster cluster) {
             return cluster.getConfigRef();
         }
 

Modified: trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Config.java
Url: https://glassfish-svn.dev.java.net/source/browse/glassfish-svn/trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Config.java?view=diff&rev=37418&p1=trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Config.java&p2=trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Config.java&r1=37417&r2=37418
==============================================================================
--- trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Config.java	(original)
+++ trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Config.java	2010-06-03 09:23:13+0000
@@ -45,8 +45,6 @@
 
 import com.sun.common.util.logging.LoggingConfigImpl;
 import com.sun.grizzly.config.dom.NetworkConfig;
-import org.glassfish.config.support.Delete;
-import org.glassfish.config.support.TypeAndNameResolver;
 import org.jvnet.hk2.config.types.Property;
 import org.jvnet.hk2.config.types.PropertyBag;
 import org.glassfish.api.admin.config.Container;

Modified: trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Domain.java
Url: https://glassfish-svn.dev.java.net/source/browse/glassfish-svn/trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Domain.java?view=diff&rev=37418&p1=trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Domain.java&p2=trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Domain.java&r1=37417&r2=37418
==============================================================================
--- trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Domain.java	(original)
+++ trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Domain.java	2010-06-03 09:23:13+0000
@@ -36,6 +36,7 @@
 
 package com.sun.enterprise.config.serverbeans;
 
+import org.glassfish.api.admin.config.ReferenceContainer;
 import org.jvnet.hk2.config.types.PropertyBag;
 import org.glassfish.api.admin.config.ApplicationName;
 import org.glassfish.api.admin.config.PropertiesDesc;
@@ -48,6 +49,7 @@
 import org.jvnet.hk2.config.Configured;
 import org.jvnet.hk2.config.DuckTyped;
 import org.jvnet.hk2.config.Element;
+import com.sun.enterprise.util.StringUtils;
 
 import java.beans.PropertyVetoException;
 import java.util.*;
@@ -393,6 +395,15 @@
     @DuckTyped
     Cluster getClusterNamed(String name);
 
+    @DuckTyped
+    ReferenceContainer getReferenceContainerNamed(String name);
+
+    @DuckTyped
+    List<ReferenceContainer> getAllReferenceContainers();
+
+    @DuckTyped
+    List<ReferenceContainer> getReferenceContainersOf(Config config);
+
     class Duck {
         public static List<Application> getAllDefinedSystemApplications(Domain me) {
             List<Application> allSysApps = new ArrayList<Application>();
@@ -505,5 +516,44 @@
             }
             return null;
         }
+
+         public static ReferenceContainer getReferenceContainerNamed(Domain d, String name) {
+            // Clusters and Servers are ReferenceContainers
+            Cluster c = getClusterNamed(d, name);
+
+            if(c != null)
+                return c;
+
+            return getServerNamed(d, name);
+        }
+
+        public static List<ReferenceContainer> getReferenceContainersOf(Domain d, Config config) {
+            // Clusters and Servers are ReferenceContainers
+            List<ReferenceContainer> sub = new LinkedList<ReferenceContainer>();
+
+            // both the config and its name need to be sanity-checked
+            String name = null;
+
+            if(config != null)
+                name = config.getName();
+
+            if(!StringUtils.ok(name))  // we choose to make this not an error
+                return sub;
+
+            List<ReferenceContainer> all = getAllReferenceContainers(d);
+
+            for(ReferenceContainer rc : all) {
+                if(name.equals(rc.getReference()))
+                    sub.add(rc);
+            }
+            return sub;
+        }
+
+        public static List<ReferenceContainer> getAllReferenceContainers(Domain d) {
+            List<ReferenceContainer> ReferenceContainers = new LinkedList<ReferenceContainer>();
+            ReferenceContainers.addAll(d.getServers().getServer());
+            ReferenceContainers.addAll(d.getClusters().getCluster());
+            return ReferenceContainers;
+        }
     }
 }

Modified: trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Server.java
Url: https://glassfish-svn.dev.java.net/source/browse/glassfish-svn/trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Server.java?view=diff&rev=37418&p1=trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Server.java&p2=trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Server.java&r1=37417&r2=37418
==============================================================================
--- trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Server.java	(original)
+++ trunk/v3/admin/config-api/src/main/java/com/sun/enterprise/config/serverbeans/Server.java	2010-06-03 09:23:13+0000
@@ -210,8 +210,32 @@
     @DuckTyped
     Cluster getCluster();
 
+    // four trivial methods that ReferenceContainer's need to implement
+    @DuckTyped
+    @Override
+    boolean isCluster();
+
+    @DuckTyped
+    @Override
+    boolean isServer();
+
+    @DuckTyped
+    @Override
+    boolean isDas();
+
+    @DuckTyped
+    @Override
+    boolean isInstance();
 
     class Duck {
+        public static boolean isCluster(Server server) { return false; }
+        public static boolean isServer(Server server)  { return true; }
+        public static boolean isInstance(Server server) { return !isDas(server); }
+        public static boolean isDas(Server server) {
+            String name = server.getName();
+            // todo find the constant somewhere for "server"!
+            return name != null && name.equals("server");
+        }
 
         public static Cluster getCluster(Server server) {
             Dom serverDom = Dom.unwrap(server);
@@ -430,6 +454,9 @@
         @Inject
         Configs configs;
 
+        @Inject
+        private Domain domain;
+
         @Override
         public void decorate(AdminCommandContext context, Servers parent, final Server child) throws PropertyVetoException, TransactionFailure  {
             Logger logger = LogDomains.getLogger(Server.class, LogDomains.ADMIN_LOGGER);
@@ -440,6 +467,11 @@
             if (isStandAlone) { // remove config <instance>-config
                 String instanceConfig = child.getConfigRef();
                 final Config config = configs.getConfigByName(instanceConfig);
+
+                // bnevins June 2010
+                // don't delete the config is someone else holds a reference to it!
+                if(config != null && domain.getReferenceContainersOf(config).size() > 1)
+                    return;
                 try {
                     ConfigSupport.apply(new SingleConfigCode<Configs>() {
 

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@glassfish-svn.dev.java.net
For additional commands, e-mail: commits-help@glassfish-svn.dev.java.net