001 /* 002 * 003 * ==================================================================== 004 * 005 * Copyright 2004 The Apache Software Foundation 006 * 007 * Licensed under the Apache License, Version 2.0 (the "License"); 008 * you may not use this file except in compliance with the License. 009 * You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, software 014 * distributed under the License is distributed on an "AS IS" BASIS, 015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 016 * See the License for the specific language governing permissions and 017 * limitations under the License. 018 * 019 */ 020 package org.apache.commons.contract.util; 021 022 import java.io.BufferedReader; 023 import java.io.IOException; 024 import java.io.InputStreamReader; 025 import java.util.HashMap; 026 import java.util.Locale; 027 import java.util.Map; 028 029 import org.apache.commons.contract.Context; 030 import org.apache.commons.contract.ContractViolationException; 031 import org.apache.commons.contract.Executor; 032 import org.apache.commons.contract.Processor; 033 import org.apache.commons.contract.Result; 034 import org.apache.commons.contract.context.VMContext; 035 import org.apache.commons.contract.descriptor.ParameterDescriptor; 036 import org.apache.commons.contract.i18n.ParameterBundle; 037 038 public class InteractiveMainWrapper extends MainWrapper { 039 public static Result main(String []args, Processor processor) { 040 Executor.init(); 041 printUsage(processor); 042 Context context = new VMContext(); 043 ParameterDescriptor[] parameterDescriptors = processor.getParameterDescriptors(); 044 Map parameters = new HashMap(); 045 BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) ); 046 for ( int i = 0; i < parameterDescriptors.length; i++ ) { 047 Object value = null; 048 do { 049 System.out.print(parameterDescriptors[i].getName()+" - "); 050 printParameterInfo(parameterDescriptors[i]); 051 System.out.print(((ParameterBundle)parameterDescriptors[i].getDescription()).getPrompt(Locale.getDefault())); 052 try { 053 String userInput = in.readLine(); 054 value = Executor.prepareValue(parameterDescriptors[i], userInput, context); 055 } catch (IOException e) { 056 value = null; 057 } catch (ContractViolationException e) { 058 printException(e); 059 value = null; 060 } 061 } while ( value == null ); 062 parameters.put(parameterDescriptors[i].getName(), value); 063 } 064 try { 065 Result result = Executor.process(processor, parameters, context); 066 printInformations(context.getInformations()); 067 return result; 068 } catch ( ContractViolationException exception ) { 069 printException(exception); 070 System.out.println(); 071 printUsage(processor); 072 } catch ( Exception exception ) { 073 exception.printStackTrace(); 074 } 075 return null; 076 } 077 }