001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020 021 package org.apache.directory.shared.ldap.util; 022 023 024 import java.util.Collections; 025 import java.util.LinkedList; 026 import java.util.List; 027 028 import org.apache.directory.shared.i18n.I18n; 029 030 031 public class MandatoryAndOptionalComponentsMonitor implements ComponentsMonitor 032 { 033 private ComponentsMonitor mandatoryComponentsMonitor; 034 035 private ComponentsMonitor optionalComponentsMonitor; 036 037 038 public MandatoryAndOptionalComponentsMonitor(String[] mandatoryComponents, String[] optionalComponents) 039 throws IllegalArgumentException 040 { 041 // check for common elements 042 for ( int i = 0; i < mandatoryComponents.length; i++ ) 043 { 044 for ( int j = 0; j < optionalComponents.length; j++ ) 045 { 046 if ( mandatoryComponents[i].equals( optionalComponents[j] ) ) 047 { 048 throw new IllegalArgumentException( I18n.err( I18n.ERR_04415, mandatoryComponents[i] ) ); 049 } 050 } 051 } 052 053 mandatoryComponentsMonitor = new MandatoryComponentsMonitor( mandatoryComponents ); 054 optionalComponentsMonitor = new OptionalComponentsMonitor( optionalComponents ); 055 } 056 057 058 public ComponentsMonitor useComponent( String component ) 059 { 060 try 061 { 062 mandatoryComponentsMonitor.useComponent( component ); 063 } 064 catch ( IllegalArgumentException e1 ) 065 { 066 try 067 { 068 optionalComponentsMonitor.useComponent( component ); 069 } 070 catch ( IllegalArgumentException e2 ) 071 { 072 throw new IllegalArgumentException( I18n.err( I18n.ERR_04416, component ) ); 073 } 074 } 075 076 return this; 077 } 078 079 080 public boolean allComponentsUsed() 081 { 082 return ( mandatoryComponentsMonitor.allComponentsUsed() && optionalComponentsMonitor.allComponentsUsed() ); 083 } 084 085 086 public boolean finalStateValid() 087 { 088 return ( mandatoryComponentsMonitor.finalStateValid() && optionalComponentsMonitor.finalStateValid() ); 089 } 090 091 092 public List getRemainingComponents() 093 { 094 List remainingComponents = new LinkedList(); 095 096 remainingComponents.addAll( mandatoryComponentsMonitor.getRemainingComponents() ); 097 remainingComponents.addAll( optionalComponentsMonitor.getRemainingComponents() ); 098 099 return Collections.unmodifiableList( remainingComponents ); 100 } 101 102 }