All Downloads are FREE. Search and download functionalities are using the official Maven repository.

br.com.objectos.io.xls.compiler.SheetMethod 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.io.xls.compiler;

import java.util.Set;

import br.com.objectos.code.MethodInfo;
import br.com.objectos.core.auto.AutoPojo;
import br.com.objectos.core.testing.Testable;
import br.com.objectos.io.xls.Styles;
import br.com.objectos.io.xls.annotation.Header;

import com.squareup.javapoet.MethodSpec;

/**
 * @author [email protected] (Marcio Endo)
 */
@AutoPojo
abstract class SheetMethod implements Testable {

  abstract String fieldName();
  abstract String header();
  abstract SheetMethodFormat format();
  abstract Set styleSet();
  abstract SheetMethodWidth width();

  SheetMethod() {
  }

  public static SheetMethod of(MethodInfo methodInfo) {
    return SheetMethod.builder()
        .fieldName(methodInfo.fieldName())
        .header(methodInfo.annotationInfo(Header.class)
            .map(ann -> ann.stringValue("value", methodInfo.fieldName()))
            .get())
        .format(SheetMethodFormat.of(methodInfo))
        .styleSet(SheetMethodStyle.of(methodInfo))
        .width(SheetMethodWidth.of(methodInfo))
        .build();
  }

  private static SheetMethodBuilder builder() {
    return new SheetMethodBuilderPojo();
  }

  public void toXls(MethodSpec.Builder toXls) {
    toXls.addCode("    .add($L)", fieldName());

    format().toXls(toXls);

    if (!styleSet().isEmpty()) {
      toXls.addCode(".with($T", Styles.class);

      for (SheetMethodStyle style : styleSet()) {
        style.toXls(toXls);
      }

      toXls.addCode(")");
    }

    toXls.addCode("\n");
  }

  public void writeColumnWidth(MethodSpec.Builder write) {
    width().write(write);
  }

  public void writeHeader(MethodSpec.Builder write) {
    write.addCode("    .add($S).with($T.bold()", header(), Styles.class);
    for (SheetMethodStyle style : styleSet()) {
      style.writeHeader(write);
    }
    write.addCode(")\n");
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy