001 /* 002 * CDDL HEADER START 003 * 004 * The contents of this file are subject to the terms of the 005 * Common Development and Distribution License, Version 1.0 only 006 * (the "License"). You may not use this file except in compliance 007 * with the License. 008 * 009 * You can obtain a copy of the license at 010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE 011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE. 012 * See the License for the specific language governing permissions 013 * and limitations under the License. 014 * 015 * When distributing Covered Code, include this CDDL HEADER in each 016 * file and include the License file at 017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, 018 * add the following below this CDDL HEADER, with the fields enclosed 019 * by brackets "[]" replaced with your own identifying information: 020 * Portions Copyright [yyyy] [name of copyright owner] 021 * 022 * CDDL HEADER END 023 * 024 * 025 * Copyright 2008 Sun Microsystems, Inc. 026 */ 027 028 package org.opends.server.admin.client; 029 030 031 032 import static org.opends.messages.AdminMessages.*; 033 034 import java.util.ArrayList; 035 import java.util.Collection; 036 import java.util.Collections; 037 038 import org.opends.messages.Message; 039 import org.opends.messages.MessageBuilder; 040 import org.opends.server.admin.OperationsException; 041 import org.opends.server.admin.PropertyIsMandatoryException; 042 import org.opends.server.util.Validator; 043 044 045 046 /** 047 * This exception is thrown when an attempt is made to add or modify a 048 * managed object when one or more of its mandatory properties are 049 * undefined. 050 */ 051 public class MissingMandatoryPropertiesException extends OperationsException { 052 053 /** 054 * Serialization ID. 055 */ 056 private static final long serialVersionUID = 6342522125252055588L; 057 058 059 060 // Create the message. 061 private static Message createMessage( 062 Collection<PropertyIsMandatoryException> causes) { 063 Validator.ensureNotNull(causes); 064 Validator.ensureTrue(!causes.isEmpty()); 065 066 if (causes.size() == 1) { 067 return ERR_MISSING_MANDATORY_PROPERTIES_EXCEPTION_SINGLE.get(causes 068 .iterator().next().getPropertyDefinition().getName()); 069 } else { 070 MessageBuilder builder = new MessageBuilder(); 071 072 boolean isFirst = true; 073 for (PropertyIsMandatoryException cause : causes) { 074 if (!isFirst) { 075 builder.append(", "); 076 } 077 builder.append(cause.getPropertyDefinition().getName()); 078 isFirst = false; 079 } 080 081 return ERR_MISSING_MANDATORY_PROPERTIES_EXCEPTION_PLURAL.get(builder 082 .toMessage()); 083 } 084 } 085 086 // The causes of this exception. 087 private final Collection<PropertyIsMandatoryException> causes; 088 089 // Indicates whether the exception occurred during managed object 090 // creation. 091 private final boolean isCreate; 092 093 // The user friendly name of the component that caused this 094 // exception. 095 private final Message ufn; 096 097 098 099 /** 100 * Creates a new missing mandatory properties exception with the 101 * provided causes. 102 * 103 * @param ufn 104 * The user friendly name of the component that caused this 105 * exception. 106 * @param causes 107 * The causes of this exception (must be non-<code>null</code> 108 * and non-empty). 109 * @param isCreate 110 * Indicates whether the exception occurred during managed 111 * object creation. 112 */ 113 public MissingMandatoryPropertiesException(Message ufn, 114 Collection<PropertyIsMandatoryException> causes, boolean isCreate) { 115 super(createMessage(causes)); 116 117 this.causes = new ArrayList<PropertyIsMandatoryException>(causes); 118 this.ufn = ufn; 119 this.isCreate = isCreate; 120 } 121 122 123 124 /** 125 * Gets the first exception that caused this exception. 126 * 127 * @return Returns the first exception that caused this exception. 128 */ 129 @Override 130 public PropertyIsMandatoryException getCause() { 131 return causes.iterator().next(); 132 } 133 134 135 136 /** 137 * Gets an unmodifiable collection view of the causes of this 138 * exception. 139 * 140 * @return Returns an unmodifiable collection view of the causes of 141 * this exception. 142 */ 143 public Collection<PropertyIsMandatoryException> getCauses() { 144 return Collections.unmodifiableCollection(causes); 145 } 146 147 148 149 /** 150 * Gets the user friendly name of the component that caused this 151 * exception. 152 * 153 * @return Returns the user friendly name of the component that 154 * caused this exception. 155 */ 156 public Message getUserFriendlyName() { 157 return ufn; 158 } 159 160 161 162 /** 163 * Indicates whether or not this exception was thrown during managed 164 * object creation or during modification. 165 * 166 * @return Returns <code>true</code> if this exception was thrown 167 * during managed object creation. 168 */ 169 public boolean isCreate() { 170 return isCreate; 171 } 172 173 }