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

br.com.objectos.xls.pojo.plugin.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.xls.pojo.plugin;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;

import br.com.objectos.pojo.Pojo;
import br.com.objectos.pojo.plugin.PojoInfo;
import br.com.objectos.pojo.plugin.Property;
import br.com.objectos.testable.Testable;
import br.com.objectos.xls.Styles;
import br.com.objectos.xls.pojo.Header;

import com.squareup.javapoet.MethodSpec;

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

  private static final Map> CACHE = new ConcurrentHashMap<>();

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

  SheetMethod() {
  }

  public static List of(PojoInfo pojoInfo) {
    return CACHE.computeIfAbsent(pojoInfo, SheetMethod::of0);
  }

  private static List of0(PojoInfo pojoInfo) {
    return pojoInfo.propertyStream()
        .map(SheetMethod::of1)
        .collect(Collectors.toList());
  }

  private static SheetMethod of1(Property property) {
    return SheetMethod.builder()
        .fieldName(property.name())
        .header(property.annotationInfo(Header.class)
            .map(ann -> ann.stringValue("value", property.name()))
            .get())
        .format(SheetMethodFormat.of(property))
        .styleSet(SheetMethodStyle.of(property))
        .width(SheetMethodWidth.of(property))
        .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