001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.xbean.command;
018
019 import javax.naming.Context;
020 import javax.naming.InitialContext;
021 import javax.naming.NameClassPair;
022 import javax.naming.NameNotFoundException;
023 import javax.naming.NamingEnumeration;
024 import java.io.IOException;
025 import java.io.InputStream;
026 import java.io.PrintStream;
027
028 public class Lookup implements Command {
029
030 private final javax.naming.Context ctx;
031
032 public Lookup() throws Exception {
033 this(new InitialContext());
034 }
035
036 public Lookup(Context ctx) {
037 this.ctx = ctx;
038 }
039
040 public static void register() {
041 try {
042 Lookup cmd = new Lookup();
043 CommandRegistry.register("lookup", cmd);
044 } catch (Exception e) {
045 }
046 }
047
048 private static String PWD = "";
049
050 // execute jndi lookups
051 public int main(String[] args, InputStream in, PrintStream out) {
052 try {
053 String name = "";
054 if (args == null || args.length == 0) {
055 name = PWD;
056 } else {
057 name = args[0];
058 }
059 Object obj = null;
060 try {
061 obj = ctx.lookup(name);
062 } catch (NameNotFoundException e) {
063 out.print("lookup: ");
064 out.print(name);
065 out.println(": No such object or subcontext");
066 return -1;
067 } catch (Throwable e) {
068 out.print("lookup: error: ");
069 e.printStackTrace(new PrintStream(out));
070 return -1;
071 }
072 if (obj instanceof Context) {
073 list(name, in, out);
074 return 0;
075 }
076 // TODO:1: Output the different data types differently
077 out.println("" + obj);
078 return 0;
079
080 } catch (Exception e) {
081 e.printStackTrace(new PrintStream(out));
082 return -2;
083 }
084 }
085
086 public void list(String name, InputStream in, PrintStream out) throws IOException {
087 try {
088 NamingEnumeration names = null;
089 try {
090 names = ctx.list(name);
091 } catch (NameNotFoundException e) {
092 out.print("lookup: ");
093 out.print(name);
094 out.println(": No such object or subcontext");
095 return;
096 } catch (Throwable e) {
097 out.print("lookup: error: ");
098 e.printStackTrace(new PrintStream(out));
099 return;
100 }
101 if (names == null) {
102 return;
103 }
104 while (names.hasMore()) {
105 NameClassPair entry = (NameClassPair) names.next();
106 out.println(entry.getName());
107 }
108 } catch (Exception e) {
109 e.printStackTrace(new PrintStream(out));
110 }
111 }
112 }