package com.farata.java_test.service;
import java.lang.reflect.Field;
import java.util.List;
import clear.transaction.identity.PropertyRack;
import com.farata.java_test.data.DataEngine;
import com.farata.java_test.dto.CompanyDTO;
import com.farata.java_test.service.generated._CompanyService;
import flex.data.ChangeObject;
public class CompanyService extends _CompanyService {
DataEngine dataEngine = DataEngine.getInstance();
public List<CompanyDTO> fill() {
List<CompanyDTO> companyList = dataEngine.getCompanyList();
System.out.println("fill method has returned " + companyList.size() + " CompanyDTO records");
return companyList;
}
// This method, with arbitrary name, illustrates how to insert new data
// marked as changeObject.isCreate()
public void fill_doCreate(ChangeObject changeObject) {
CompanyDTO dto = (CompanyDTO) changeObject.getNewVersion();
System.out.println("doCreate method adding new object:");
System.out.println(dto);
//Check "autoincrement" field - id -and, when null, set it to max+1
//Please note that Farata translator must be plugged in to AMF channel
// in order to guarantee ActionsScript NaN will come as "null", otherwise
// default BlazeDS/LCDS behavior would deliver it as 0:
if ((dto.getId() == null) || (dto.getId() <= 0)) {
Object oldId = dto.getId();
dto.setId(dataEngine.getMaxCompanyId() + 1);
changeObject.addChangedPropertyName("id");
PropertyRack.setEntity("com.farata.test.dto.CompanyDTO", "id", oldId, dto.getId());
}
dataEngine.getCompanyList().add(dto);
}
// This method, with arbitrary name, illustrates how to update data marked
// as changeObject.isUpdate() utilizing array of changedPropertyNames
public void fill_doUpdate(ChangeObject changeObject) {
System.out.println("doUpdate method executing");
CompanyDTO newVersion = (CompanyDTO)changeObject.getNewVersion();
CompanyDTO previousVersion = (CompanyDTO)changeObject.getPreviousVersion();
CompanyDTO originalDTO = dataEngine.findCompany(previousVersion);
if (originalDTO != null) {
String[] changedPropertyNames = changeObject.getChangedPropertyNames();
Class<?extends CompanyDTO> clazz = CompanyDTO.class;
for (String propertyName: changedPropertyNames) {
try {
Field field = clazz.getField(propertyName);
Object originalValue = field.get(originalDTO);
Object newValue = field.get(newVersion);
field.set(originalDTO, newValue);
System.out.println("Changed: " + propertyName + ", Original Value: "
+ originalValue + ", New Value: " + newValue);
} catch (Exception e) {
new RuntimeException("Failed updating property '" + propertyName +"'" );
}
}
}
}
// This method, with arbitrary name, illustrates how to delete data marked
// as changeObject.isDelete().
public void fill_doDelete(ChangeObject changeObject) {
System.out.print("doDelete method ");
CompanyDTO dto = (CompanyDTO) changeObject.getPreviousVersion();
CompanyDTO removed = dataEngine.removeCompany(dto);
if (removed != null) {
System.out.println("removed: " + removed);
}
}
}