001 /*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.kfs.vnd;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.kfs.sys.context.SpringContext;
020 import org.kuali.rice.kns.service.KualiConfigurationService;
021 import org.kuali.rice.kns.util.ObjectUtils;
022
023 /**
024 * Utility class with helper methods for Vendor processing
025 */
026 public class VendorUtils {
027
028 public static final char LEFT_COLLECTION_SEPERATOR = '[';
029 public static final char RIGHT_COLLECTION_SEPERATOR = ']';
030 public static final char FIELD_SEPERATOR = '.';
031
032 /**
033 * Builds up a string and a position like so abc, 1 becomes abc[1] it is used for fields that require operations on
034 * collections.
035 *
036 * @param full
037 * @param collections
038 * @param pos
039 * @return Newly formatted string
040 */
041 public static String assembleWithPosition(String full, String[] collections, int[] positions) {
042
043 if (collections.length != positions.length) {
044 throw new IllegalArgumentException();
045 }
046
047 String[] parts = StringUtils.split(full, FIELD_SEPERATOR);
048
049 for (int j = 0; j < parts.length; j++) {
050 for (int i = 0; i < collections.length; i++) {
051 if (StringUtils.equals(parts[j], collections[i])) {
052 parts[j] = collections[i] + LEFT_COLLECTION_SEPERATOR + positions[i] + RIGHT_COLLECTION_SEPERATOR;
053 break;
054 }
055
056 }
057 }
058
059 return StringUtils.join(parts, FIELD_SEPERATOR);
060 }
061
062 /**
063 * A helper to call assembleWithPosition(String full, String[] collections, int[] positions) when only one
064 * collection
065 *
066 * @param full
067 * @param collection
068 * @param position
069 * @return Newly formatted string
070 */
071 public static String assembleWithPosition(String full, String collection, int position) {
072 String[] collections = { collection };
073 int[] positions = { position };
074 return assembleWithPosition(full, collections, positions);
075 }
076
077 /**
078 * Returns the headerId portion from a composite vendor number.
079 *
080 * @param vendorNumber - composite vendor number (detail and header)
081 * @return returns the headerId number
082 */
083 public static Integer getVendorHeaderId(String vendorNumber) {
084
085 // validate the vendorNumber passed in
086 if (!VendorUtils.validVendorNumberFormat(vendorNumber)) {
087 return null;
088 }
089
090 // return the headerId, everything before the dash (-)
091 String[] vendorNumberParts = vendorNumber.split("-");
092 return new Integer(Integer.parseInt(vendorNumberParts[0]));
093 }
094
095 /**
096 * Returns the detailId portion from a composite vendor number.
097 *
098 * @param vendorNumber - composite vendor number (detail and header)
099 * @return returns the detailId number
100 */
101 public static Integer getVendorDetailId(String vendorNumber) {
102
103 if (!VendorUtils.validVendorNumberFormat(vendorNumber)) {
104 return null;
105 }
106
107 // return the headerId, everything before the dash (-)
108 String[] vendorNumberParts = vendorNumber.split("-");
109 return new Integer(Integer.parseInt(vendorNumberParts[1]));
110 }
111
112 /**
113 * Accepts a vendorNumber string, and evaluates it to make sure it is of the correct format. This method does not
114 * test whether the given vendor number exists in the database, rather it just tests that the format is correct.
115 *
116 * @param vendorNumber - String representing the vendor number
117 * @return - returns an empty string on success, or an error message on a failure
118 */
119 public static boolean validVendorNumberFormat(String vendorNumber) {
120
121 // disallow null string
122 if (vendorNumber == null) {
123 return false;
124 }
125
126 // validate the overall format: numbers - numbers
127 if (!vendorNumber.matches("\\d+-\\d+")) {
128 return false;
129 }
130
131 return true;
132 }
133
134 /**
135 * Composes the text for the note related to parent change to be added to the old parent vendor.
136 *
137 * @param messageKey
138 * @param parameters
139 * @return
140 */
141 public static String buildMessageText(String messageKey, String... parameters) {
142 String result = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(messageKey);
143 if (ObjectUtils.isNotNull(parameters)) {
144 for (int i = 0; i < parameters.length; i++) {
145 result = StringUtils.replace(result, "{" + i + "}", parameters[i]);
146 }
147 }
148 return result;
149 }
150 }