/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.mahout.ga.watchmaker.cd.tool;
import com.google.common.base.Preconditions;
/**
* Used as a configuration Parameters for the mapper-combiner-reducer<br>
* CDTOOL.ATTRIBUTES : char[] description of the attributes.<br>
* for each attribute, takes one of this values:<br>
* <ul>
* <li>N : numerical attribute</li>
* <li>C : categorical (nominal) attribute</li>
* <li>L : label (nominal) attribute</li>
* <li>I : ignored attribute</li>
* </ul>
*
*/
public final class Descriptors {
private final char[] descriptors;
public Descriptors(char[] descriptors) {
Preconditions.checkArgument(descriptors != null && descriptors.length > 0, "descriptors null or empty");
this.descriptors = descriptors;
// check that all the descriptors are correct ('I', 'N' 'L' or 'C')
for (int index = 0; index < descriptors.length; index++) {
Preconditions.checkArgument(isIgnored(index) || isNumerical(index) || isNominal(index),
"Bad descriptor value", descriptors[index]);
}
}
public boolean isIgnored(int index) {
return descriptors[index] == 'i' || descriptors[index] == 'I';
}
public boolean isNumerical(int index) {
return descriptors[index] == 'n' || descriptors[index] == 'N';
}
public boolean isNominal(int index) {
return descriptors[index] == 'c' || descriptors[index] == 'C' || isLabel(index);
}
public boolean isLabel(int index) {
return descriptors[index] == 'l' || descriptors[index] == 'L';
}
public int size() {
return descriptors.length;
}
public char[] getChars() {
return descriptors;
}
}