// Copyright (C) 2017 BarD Software
package biz.ganttproject.impex.csv;
import biz.ganttproject.core.model.task.TaskDefaultColumn;
import biz.ganttproject.core.option.BooleanOption;
import com.google.common.base.Charsets;
import net.sourceforge.ganttproject.CustomPropertyDefinition;
import net.sourceforge.ganttproject.CustomPropertyManager;
import net.sourceforge.ganttproject.io.CSVOptions;
import net.sourceforge.ganttproject.resource.HumanResource;
import net.sourceforge.ganttproject.resource.HumanResourceManager;
import net.sourceforge.ganttproject.roles.RoleManager;
import net.sourceforge.ganttproject.roles.RoleManagerImpl;
import net.sourceforge.ganttproject.task.CustomColumnsManager;
import net.sourceforge.ganttproject.task.Task;
import net.sourceforge.ganttproject.task.TaskManager;
import net.sourceforge.ganttproject.test.task.TaskTestCase;
import java.io.ByteArrayOutputStream;
import static biz.ganttproject.impex.csv.SpreadsheetFormat.CSV;
/**
* @author dbarashev@bardsoftware.com
*/
public class GPCsvExportTest extends TaskTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
TaskDefaultColumn.setLocaleApi(null);
}
public void testResourceCustomFields() throws Exception {
HumanResourceManager hrManager = new HumanResourceManager(null, new CustomColumnsManager());
TaskManager taskManager = getTaskManager();
RoleManager roleManager = new RoleManagerImpl();
CSVOptions csvOptions = new CSVOptions();
for (BooleanOption option : csvOptions.getResourceOptions().values()) {
if (!"id".equals(option.getID())) {
option.setValue(false);
}
}
CustomPropertyDefinition prop1 = hrManager.getCustomPropertyManager().createDefinition(
CustomPropertyManager.PropertyTypeEncoder.encodeFieldType(String.class), "prop1", null);
CustomPropertyDefinition prop2 = hrManager.getCustomPropertyManager().createDefinition(
CustomPropertyManager.PropertyTypeEncoder.encodeFieldType(String.class), "prop2", null);
CustomPropertyDefinition prop3 = hrManager.getCustomPropertyManager().createDefinition(
CustomPropertyManager.PropertyTypeEncoder.encodeFieldType(String.class), "prop3", null);
hrManager.add(new HumanResource("HR1", 1, hrManager));
hrManager.add(new HumanResource("HR2", 2, hrManager));
hrManager.add(new HumanResource("HR3", 3, hrManager));
hrManager.getById(1).addCustomProperty(prop3, "1");
hrManager.getById(2).addCustomProperty(prop2, "2");
hrManager.getById(3).addCustomProperty(prop1, "3");
GanttCSVExport exporter = new GanttCSVExport(taskManager, hrManager, roleManager, csvOptions);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try (SpreadsheetWriter writer = exporter.createWriter(outputStream, CSV)) {
exporter.save(writer);
}
String[] lines = new String(outputStream.toByteArray(), Charsets.UTF_8.name()).split("\\n");
assertEquals(7, lines.length);
assertEquals("ID,prop1,prop2,prop3", lines[3].trim());
assertEquals("1,,,1", lines[4].trim());
assertEquals("2,,2,", lines[5].trim());
assertEquals("3,3,,", lines[6].trim());
}
public void testTaskCustomFields() throws Exception {
HumanResourceManager hrManager = new HumanResourceManager(null, new CustomColumnsManager());
TaskManager taskManager = getTaskManager();
RoleManager roleManager = new RoleManagerImpl();
CSVOptions csvOptions = new CSVOptions();
for (BooleanOption option : csvOptions.getTaskOptions().values()) {
if (!TaskDefaultColumn.ID.getStub().getID().equals(option.getID())) {
option.setValue(false);
}
}
CustomPropertyDefinition prop1 = taskManager.getCustomPropertyManager().createDefinition(
CustomPropertyManager.PropertyTypeEncoder.encodeFieldType(String.class), "prop1", null);
CustomPropertyDefinition prop2 = taskManager.getCustomPropertyManager().createDefinition(
CustomPropertyManager.PropertyTypeEncoder.encodeFieldType(String.class), "prop2", null);
CustomPropertyDefinition prop3 = taskManager.getCustomPropertyManager().createDefinition(
CustomPropertyManager.PropertyTypeEncoder.encodeFieldType(String.class), "prop3", null);
Task task1 = createTask();
Task task2 = createTask();
Task task3 = createTask();
task1.getCustomValues().addCustomProperty(prop3, "a");
task2.getCustomValues().addCustomProperty(prop2, "b");
task3.getCustomValues().addCustomProperty(prop1, "c");
GanttCSVExport exporter = new GanttCSVExport(taskManager, hrManager, roleManager, csvOptions);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try (SpreadsheetWriter writer = exporter.createWriter(outputStream, CSV)) {
exporter.save(writer);
}
String[] lines = new String(outputStream.toByteArray(), Charsets.UTF_8.name()).split("\\n");
assertEquals(4, lines.length);
assertEquals("tableColID,prop1,prop2,prop3", lines[0].trim());
assertEquals("0,,,a", lines[1].trim());
assertEquals("1,,b,", lines[2].trim());
assertEquals("2,c,,", lines[3].trim());
}
}