
br.com.objectos.xls.pojo.plugin.SpreadsheetMethod Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2015 Objectos, Fábrica de Software LTDA.
*
* Licensed 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 br.com.objectos.xls.pojo.plugin;
import java.util.List;
import java.util.Optional;
import br.com.objectos.code.SimpleTypeInfo;
import br.com.objectos.code.TypeInfo;
import br.com.objectos.code.TypeParameterInfo;
import br.com.objectos.pojo.plugin.Contribution.Builder;
import br.com.objectos.pojo.plugin.Property;
import br.com.objectos.xls.pojo.Row;
import com.squareup.javapoet.MethodSpec;
/**
* @author [email protected] (Marcio Endo)
*/
class SpreadsheetMethod {
private final String fieldName;
private final SheetType sheetType;
private SpreadsheetMethod(String fieldName, SheetType sheetType) {
this.fieldName = fieldName;
this.sheetType = sheetType;
}
public static Optional of(Property property) {
SimpleTypeInfo returnTypeInfo = property.returnTypeInfo();
if (!returnTypeInfo.isSubType(List.class)) {
property.compilationError("Only List<> methods are currently supported.");
return Optional.empty();
}
TypeInfo typeInfo = returnTypeInfo.getTypeParameterInfoStream()
.findFirst()
.flatMap(TypeParameterInfo::typeInfo)
.get();
if (!typeInfo.hasInterface(Row.class)) {
property.compilationError("%s must implement Row.", typeInfo.simpleName());
return Optional.empty();
}
SheetType sheetType = SheetType.of(typeInfo);
SpreadsheetMethod method = new SpreadsheetMethod(property.name(), sheetType);
return Optional.of(method);
}
public void addTo(Builder builder) {
builder.addMethod(sheetType.write(fieldName));
}
public void newSpreadsheetStatement(MethodSpec.Builder newSpreadsheet) {
sheetType.newSpreadsheetStatement(newSpreadsheet, fieldName);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy