Hi Jiajia, I'm getting a compilation failure:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.2:compile (default-compile) on project has-server: Compilation failure [ERROR] /home/colm/src/apache/directory-kerby/has-project/has-server/src/main/java/org/apache/kerby/has/server/admin/LocalHadmin.java:[39,8] class LocalHasAdmin is public, should be declared in a file named LocalHasAdmin.java Colm. On Mon, Jan 29, 2018 at 6:31 AM, <[email protected]> wrote: > Repository: directory-kerby > Updated Branches: > refs/heads/trunk 8806cd183 -> 2e9a86443 > > > DIRKRB-689 Create principals and export keytabs with host and role. > > > Project: http://git-wip-us.apache.org/repos/asf/directory-kerby/repo > Commit: http://git-wip-us.apache.org/repos/asf/directory-kerby/ > commit/2e9a8644 > Tree: http://git-wip-us.apache.org/repos/asf/directory-kerby/tree/2e9a8644 > Diff: http://git-wip-us.apache.org/repos/asf/directory-kerby/diff/2e9a8644 > > Branch: refs/heads/trunk > Commit: 2e9a86443024794be8df7e871cee956051ab9fdb > Parents: 8806cd1 > Author: plusplusjiajia <[email protected]> > Authored: Mon Jan 29 14:28:02 2018 +0800 > Committer: plusplusjiajia <[email protected]> > Committed: Mon Jan 29 14:28:02 2018 +0800 > > ---------------------------------------------------------------------- > .../org/apache/kerby/has/common/Hadmin.java | 35 +++ > .../kerby/has/server/admin/LocalHadmin.java | 140 ++++++++++++ > .../kerby/has/server/web/HostRoleType.java | 55 +++++ > .../kerby/has/server/web/rest/HadminApi.java | 215 +++++++++++++++++++ > .../has/server/web/rest/param/HostParam.java | 45 ++++ > .../server/web/rest/param/HostRoleParam.java | 45 ++++ > 6 files changed, 535 insertions(+) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > blob/2e9a8644/has-project/has-common/src/main/java/org/ > apache/kerby/has/common/Hadmin.java > ---------------------------------------------------------------------- > diff --git > a/has-project/has-common/src/main/java/org/apache/kerby/has/common/Hadmin.java > b/has-project/has-common/src/main/java/org/apache/kerby/ > has/common/Hadmin.java > new file mode 100644 > index 0000000..882b10f > --- /dev/null > +++ b/has-project/has-common/src/main/java/org/apache/kerby/ > has/common/Hadmin.java > @@ -0,0 +1,35 @@ > +/** > + * 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.kerby.has.common; > + > +import java.io.File; > + > +/** > + * Server side admin facilities from remote, similar to MIT kadmin remote > mode. > + */ > +public interface Hadmin { > + > + > + String addPrincByRole(String host, String role) throws HasException; > + > + File getKeytabByHostAndRole(String host, String role) throws > HasException; > + > + void getHostRoles(); > +} > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > blob/2e9a8644/has-project/has-server/src/main/java/org/ > apache/kerby/has/server/admin/LocalHadmin.java > ---------------------------------------------------------------------- > diff --git a/has-project/has-server/src/main/java/org/apache/kerby/ > has/server/admin/LocalHadmin.java b/has-project/has-server/src/ > main/java/org/apache/kerby/has/server/admin/LocalHadmin.java > new file mode 100644 > index 0000000..4661d87 > --- /dev/null > +++ b/has-project/has-server/src/main/java/org/apache/kerby/ > has/server/admin/LocalHadmin.java > @@ -0,0 +1,140 @@ > +/** > + * 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.kerby.has.server.admin; > + > +import org.apache.kerby.has.common.Hadmin; > +import org.apache.kerby.has.common.HasException; > +import org.apache.kerby.has.server.HasServer; > +import org.apache.kerby.has.server.web.HostRoleType; > +import org.apache.kerby.kerberos.kerb.KrbException; > +import org.apache.kerby.kerberos.kerb.admin.kadmin.local.LocalKadmin; > +import org.apache.kerby.kerberos.kerb.admin.kadmin.local.LocalKadminImpl; > +import org.apache.kerby.kerberos.kerb.identity.backend.BackendConfig; > +import org.apache.kerby.kerberos.kerb.server.KdcConfig; > +import org.apache.kerby.kerberos.kerb.server.KdcSetting; > +import org.apache.kerby.kerberos.kerb.server.KdcUtil; > +import org.apache.kerby.kerberos.kerb.server.ServerSetting; > +import org.slf4j.Logger; > +import org.slf4j.LoggerFactory; > + > +import java.io.File; > + > +public class LocalHasAdmin implements Hadmin { > + public static final Logger LOG = LoggerFactory.getLogger( > LocalHasAdmin.class); > + > + private final ServerSetting serverSetting; > + private LocalKadmin kadmin; > + > + public LocalHasAdmin(HasServer hasServer) throws KrbException { > + if (hasServer.getKdcServer() == null) { > + throw new RuntimeException("Could not get HAS KDC server, > please start KDC first."); > + } > + this.serverSetting = hasServer.getKdcServer().getKdcSetting(); > + > + kadmin = new LocalKadminImpl(serverSetting); > + } > + > + /** > + * Construct with prepared conf dir. > + * > + * @param confDir The path of conf dir > + * @throws KrbException e > + */ > + public LocalHasAdmin(File confDir) throws KrbException { > + KdcConfig tmpKdcConfig = KdcUtil.getKdcConfig(confDir); > + if (tmpKdcConfig == null) { > + tmpKdcConfig = new KdcConfig(); > + } > + > + BackendConfig tmpBackendConfig = KdcUtil.getBackendConfig( > confDir); > + if (tmpBackendConfig == null) { > + tmpBackendConfig = new BackendConfig(); > + } > + > + this.serverSetting = new KdcSetting(tmpKdcConfig, > tmpBackendConfig); > + kadmin = new LocalKadminImpl(serverSetting); > + } > + > + @Override > + public String addPrincByRole(String host, String role) throws > HasException { > + String result = ""; > + String realm = "/" + host + "@" + kadmin.getKdcConfig(). > getKdcRealm(); > + String[] princs = HostRoleType.valueOf(role).getPrincs(); > + if (princs == null) { > + LOG.error("Cannot find the role of : " + role); > + return "Cannot find the role of : " + role; > + } > + for (String princ : princs) { > + try { > + kadmin.addPrincipal(princ + realm); > + LOG.info("Success to add princ :" + princ + realm); > + result = result + "Success to add princ :" + princ + > realm + "\n"; > + } catch (KrbException e) { > + LOG.info(e.getMessage()); > + result = e.getMessage() + "\n"; > + } > + } > + return result; > + } > + > + @Override > + public File getKeytabByHostAndRole(String host, String role) throws > HasException { > + String realm = "/" + host + "@" + kadmin.getKdcConfig(). > getKdcRealm(); > + File path = new File("/tmp/" + System.currentTimeMillis()); > + path.mkdirs(); > + File keytab = new File(path, role + "-" + host + ".keytab"); > + if (keytab.exists()) { > + keytab.delete(); > + } > + String[] princs = HostRoleType.valueOf(role).getPrincs(); > + for (String princ : princs) { > + try { > + if (kadmin.getPrincipal(princ + realm) == null) { > + continue; > + } > + } catch (KrbException e) { > + throw new HasException(e); > + } > + try { > + kadmin.exportKeytab(keytab, princ + realm); > + } catch (KrbException e) { > + throw new HasException(e); > + } > + } > + return keytab; > + } > + > + @Override > + public void getHostRoles() { > + for (HostRoleType role : HostRoleType.values()) { > + System.out.print("\tHostRole: " + role.getName() > + + ", PrincipalNames: "); > + String[] princs = role.getPrincs(); > + for (int j = 0; j < princs.length; j++) { > + System.out.print(princs[j]); > + if (j == princs.length - 1) { > + System.out.println(); > + } else { > + System.out.print(", "); > + } > + } > + } > + } > +} > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > blob/2e9a8644/has-project/has-server/src/main/java/org/ > apache/kerby/has/server/web/HostRoleType.java > ---------------------------------------------------------------------- > diff --git a/has-project/has-server/src/main/java/org/apache/kerby/ > has/server/web/HostRoleType.java b/has-project/has-server/src/ > main/java/org/apache/kerby/has/server/web/HostRoleType.java > new file mode 100644 > index 0000000..104a41f > --- /dev/null > +++ b/has-project/has-server/src/main/java/org/apache/kerby/ > has/server/web/HostRoleType.java > @@ -0,0 +1,55 @@ > +/** > + * 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.kerby.has.server.web; > + > +import org.apache.hadoop.classification.InterfaceAudience; > +import org.apache.hadoop.classification.InterfaceStability; > + > [email protected] > [email protected] > +public enum HostRoleType { > + HDFS("HDFS", new String[]{"HTTP", "hdfs"}), > + YARN("YARN", new String[]{"yarn"}), > + MAPRED("MAPRED", new String[]{"mapred"}), > + HBASE("HBASE", new String[]{"hbase"}), > + ZOOKEEPER("ZOOKEEPER", new String[]{"zookeeper"}), > + SPARK("SPARK", new String[]{"spark"}), > + HIVE("HIVE", new String[]{"hive"}), > + OOZIE("OOZIE", new String[]{"oozie"}), > + HUE("HUE", new String[]{"hue"}); > + > + private String name; > + private String[] princs; > + > + HostRoleType(String name, String[] princs) { > + this.name = name; > + this.princs = princs; > + } > + > + public String[] getPrincs() { > + return princs; > + } > + > + public String getName() { > + return name; > + } > + > + public void setName(String name) { > + this.name = name; > + } > +} > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > blob/2e9a8644/has-project/has-server/src/main/java/org/ > apache/kerby/has/server/web/rest/HadminApi.java > ---------------------------------------------------------------------- > diff --git a/has-project/has-server/src/main/java/org/apache/kerby/ > has/server/web/rest/HadminApi.java b/has-project/has-server/src/ > main/java/org/apache/kerby/has/server/web/rest/HadminApi.java > new file mode 100644 > index 0000000..c769645 > --- /dev/null > +++ b/has-project/has-server/src/main/java/org/apache/kerby/ > has/server/web/rest/HadminApi.java > @@ -0,0 +1,215 @@ > +/** > + * 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 > + * <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. > + */ > +package org.apache.kerby.has.server.web.rest; > + > +import org.apache.kerby.has.common.HasException; > +import org.apache.kerby.has.server.HasServer; > +import org.apache.kerby.has.server.admin.LocalHasAdmin; > +import org.apache.kerby.has.server.web.HostRoleType; > +import org.apache.kerby.has.server.web.WebServer; > +import org.apache.kerby.has.server.web.rest.param.HostParam; > +import org.apache.kerby.has.server.web.rest.param.HostRoleParam; > +import org.apache.kerby.kerberos.kerb.KrbException; > +import org.codehaus.jettison.json.JSONArray; > +import org.codehaus.jettison.json.JSONObject; > + > +import javax.servlet.ServletContext; > +import javax.servlet.http.HttpServletRequest; > +import javax.ws.rs.Consumes; > +import javax.ws.rs.DefaultValue; > +import javax.ws.rs.GET; > +import javax.ws.rs.PUT; > +import javax.ws.rs.Path; > +import javax.ws.rs.Produces; > +import javax.ws.rs.QueryParam; > +import javax.ws.rs.core.Context; > +import javax.ws.rs.core.MediaType; > +import javax.ws.rs.core.Response; > +import java.io.BufferedInputStream; > +import java.io.BufferedReader; > +import java.io.File; > +import java.io.FileInputStream; > +import java.io.FileOutputStream; > +import java.io.InputStreamReader; > +import java.util.ArrayList; > +import java.util.List; > +import java.util.zip.ZipEntry; > +import java.util.zip.ZipOutputStream; > + > +/** > + * HAS Admin web methods implementation. > + */ > +@Path("/admin") > +public class HadminApi { > + > + @Context > + private ServletContext context; > + > + @Context > + private HttpServletRequest httpRequest; > + > + private void compressFile(File file, ZipOutputStream out, String > basedir) { > + if (!file.exists()) { > + return; > + } > + try { > + BufferedInputStream bis = new BufferedInputStream(new > FileInputStream(file)); > + ZipEntry entry = new ZipEntry(basedir + file.getName()); > + out.putNextEntry(entry); > + int count; > + byte[] data = new byte[8192]; > + while ((count = bis.read(data, 0, 8192)) != -1) { > + out.write(data, 0, count); > + } > + bis.close(); > + } catch (Exception e) { > + throw new RuntimeException(e); > + } > + } > + > + @PUT > + @Path("/addprincipalsbyrole") > + @Consumes(MediaType.APPLICATION_JSON) > + @Produces(MediaType.APPLICATION_JSON) > + public Response addprincipalsbyrole(@Context HttpServletRequest > request) { > + if (httpRequest.isSecure()) { > + LocalHasAdmin hasAdmin = null; > + try { > + hasAdmin = new LocalHasAdmin(WebServer. > getHasServerFromContext(context)); > + } catch (KrbException e) { > + WebServer.LOG.info("Failed to create local hadmin." + > e.getMessage()); > + } > + JSONObject result = new JSONObject(); > + String msg = ""; > + try { > + StringBuilder data = new StringBuilder(); > + BufferedReader br = new BufferedReader(new > InputStreamReader(request.getInputStream())); > + String s; > + while ((s = br.readLine()) != null) { > + data.append(s); > + } > + WebServer.LOG.info("Request to create principals by JSON > : \n" + data.toString()); > + JSONArray hostArray = new JSONObject(data.toString()). > optJSONArray("HOSTS"); > + for (int i = 0; i < hostArray.length(); i++) { > + JSONObject host = (JSONObject) hostArray.get(i); > + String[] roles = host.getString("hostRoles"). > split(","); > + for (String role : roles) { > + msg += > hasAdmin.addPrincByRole(host.getString("name"), > role.toUpperCase()); > + } > + } > + result.put("result", "success"); > + result.put("msg", msg); > + return Response.ok(result.toString()).build(); > + } catch (Exception e) { > + WebServer.LOG.error("Failed to create principals,because > : " + e.getMessage()); > + msg = "Failed to create principals,because : " + > e.getMessage(); > + return Response.status(Response. > Status.INTERNAL_SERVER_ERROR).entity(msg).build(); > + } > + } > + return Response.status(Response.Status.FORBIDDEN).entity("HTTPS > required.\n").build(); > + } > + > + /** > + * @param host Hadoop node > + * @param role Hadoop role > + * @return Response > + */ > + @GET > + @Path("/exportKeytabsbyrole") > + @Produces(MediaType.TEXT_PLAIN) > + public Response exportKeytabsbyrole(@QueryParam(HostParam.NAME) > @DefaultValue(HostParam.DEFAULT) > + final HostParam host, > + @QueryParam(HostRoleParam.NAME) > @DefaultValue(HostRoleParam.DEFAULT) > + final HostRoleParam role) { > + if (httpRequest.isSecure()) { > + WebServer.LOG.info("Request to export keytabs."); > + String msg; > + LocalHasAdmin hasAdmin; > + HasServer hasServer; > + try { > + hasServer = WebServer.getHasServerFromContext(context); > + hasAdmin = new LocalHasAdmin(hasServer); > + } catch (KrbException e) { > + msg = "Failed to create local hadmin." + e.getMessage(); > + WebServer.LOG.error(msg); > + return Response.status(Response. > Status.INTERNAL_SERVER_ERROR).entity(msg).build(); > + } > + if (host.getValue() != null) { > + if (role.getValue() != null) { > + try { > + File file = > hasAdmin.getKeytabByHostAndRole(host.getValue(), > role.getValue()); > + WebServer.LOG.info("Create keytab file for the " > + role.getValue() > + + " for " + host.getValue()); > + return Response.ok(file).header(" > Content-Disposition", > + "attachment; filename=" + role.getValue() + > "-" > + + host.getValue() + ".keytab").build(); > + } catch (HasException e) { > + msg = "Failed to export keytab File because : " + > e.getMessage(); > + WebServer.LOG.error(msg); > + return Response.status(Response. > Status.INTERNAL_SERVER_ERROR).entity(msg).build(); > + } > + } else { > + //export keytabs zip file > + List<File> keytabs = new ArrayList<>(); > + for (HostRoleType r : HostRoleType.values()) { > + try { > + keytabs.add(hasAdmin. > getKeytabByHostAndRole(host.getValue(), r.getName())); > + WebServer.LOG.info("Create keytab file for > the " + r.getName() > + + " for " + host.getValue()); > + } catch (HasException e) { > + msg = "Failed to export keytab File because : > " + e.getMessage(); > + WebServer.LOG.error(msg); > + return Response.status(Response. > Status.INTERNAL_SERVER_ERROR).entity(msg).build(); > + } > + } > + if (keytabs.size() < 1) { > + msg = "Failed to get the keytab from backend."; > + WebServer.LOG.error(msg); > + return Response.status(Response. > Status.INTERNAL_SERVER_ERROR).entity(msg).build(); > + } > + File path = new File(hasServer.getWorkDir(), > "tmp/zip/" > + + System.currentTimeMillis()); > + path.mkdirs(); > + File keytabZip = new File(path, "keytab.zip"); > + if (keytabZip.exists()) { > + keytabZip.delete(); > + } > + try { > + ZipOutputStream zos = new ZipOutputStream(new > FileOutputStream(keytabZip)); > + for (File keytab : keytabs) { > + compressFile(keytab, zos, ""); > + } > + zos.close(); > + WebServer.LOG.info("Success to create the > keytab.zip."); > + return Response.ok(keytabZip).header( > "Content-Disposition", > + "attachment; filename=keytab.zip").build(); > + } catch (Exception e) { > + msg = "Failed to create the keytab.zip,because : > " + e.getMessage(); > + WebServer.LOG.error(msg); > + return Response.status(Response. > Status.INTERNAL_SERVER_ERROR).entity(msg).build(); > + } > + } > + } else { > + msg = "The host value is empty."; > + WebServer.LOG.error(msg); > + return Response.status(Response. > Status.BAD_REQUEST).entity(msg).build(); > + } > + } > + return Response.status(Response.Status.FORBIDDEN).entity("HTTPS > required.\n").build(); > + } > +} > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > blob/2e9a8644/has-project/has-server/src/main/java/org/ > apache/kerby/has/server/web/rest/param/HostParam.java > ---------------------------------------------------------------------- > diff --git a/has-project/has-server/src/main/java/org/apache/kerby/ > has/server/web/rest/param/HostParam.java b/has-project/has-server/src/ > main/java/org/apache/kerby/has/server/web/rest/param/HostParam.java > new file mode 100644 > index 0000000..acf0306 > --- /dev/null > +++ b/has-project/has-server/src/main/java/org/apache/kerby/ > has/server/web/rest/param/HostParam.java > @@ -0,0 +1,45 @@ > +/** > + * 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.kerby.has.server.web.rest.param; > + > +public class HostParam extends StringParam { > + /** > + * Parameter name. > + */ > + public static final String NAME = "host"; > + /** > + * Default parameter value. > + */ > + public static final String DEFAULT = ""; > + > + private static final Domain DOMAIN = new Domain(NAME, null); > + > + /** > + * Constructor. > + * > + * @param str a string representation of the parameter value. > + */ > + public HostParam(final String str) { > + super(DOMAIN, str == null || str.equals(DEFAULT) ? null : str); > + } > + > + @Override > + public String getName() { > + return NAME; > + } > +} > > http://git-wip-us.apache.org/repos/asf/directory-kerby/ > blob/2e9a8644/has-project/has-server/src/main/java/org/ > apache/kerby/has/server/web/rest/param/HostRoleParam.java > ---------------------------------------------------------------------- > diff --git a/has-project/has-server/src/main/java/org/apache/kerby/ > has/server/web/rest/param/HostRoleParam.java b/has-project/has-server/src/ > main/java/org/apache/kerby/has/server/web/rest/param/HostRoleParam.java > new file mode 100644 > index 0000000..72706ff > --- /dev/null > +++ b/has-project/has-server/src/main/java/org/apache/kerby/ > has/server/web/rest/param/HostRoleParam.java > @@ -0,0 +1,45 @@ > +/** > + * 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.kerby.has.server.web.rest.param; > + > +public class HostRoleParam extends StringParam { > + /** > + * Parameter name. > + */ > + public static final String NAME = "role"; > + /** > + * Default parameter value. > + */ > + public static final String DEFAULT = ""; > + > + private static final Domain DOMAIN = new Domain(NAME, null); > + > + /** > + * Constructor. > + * > + * @param str a string representation of the parameter value. > + */ > + public HostRoleParam(final String str) { > + super(DOMAIN, str == null || str.equals(DEFAULT) ? null : str); > + } > + > + @Override > + public String getName() { > + return NAME; > + } > +} > > -- Colm O hEigeartaigh Talend Community Coder http://coders.talend.com
