Skip to content

Instantly share code, notes, and snippets.

@dacrome
Created September 30, 2014 15:35
Show Gist options
  • Save dacrome/4f800b7f10fa7a4969f0 to your computer and use it in GitHub Desktop.
Save dacrome/4f800b7f10fa7a4969f0 to your computer and use it in GitHub Desktop.
This is an example for an ExtensionService and the updated ExtensionController with the changes from here: https://gist.github.com/dacrome/a04f2377f70676fc5230
// sorry, no imports
@Service
@Transactional // I know this should be in the respository, but one layer deeper than controller. yay!
public class ExtensionService {
@Inject
private ExtensionDao dao;
public List<ExtensionMap> getAllExtensions() {
List<Extension> extensions = fromEntity(dao.getAllExtensions());
final List<ExtensionMap> extensionMaps = new ArrayList<>();
for(Extension extension : extensions) {
final ExtensionMap extensionMap = new ExtensionMap(extension.getUrn());
for(Map.Entry<String, Extension.Field> fieldEntry : extension.getFields().entrySet()){
final String field = fieldEntry.getKey();
final ExtensionFieldType type = fieldEntry.getValue().getType();
extensionMap.addPair(field, type);
}
extensionMaps.add(extensionMap);
}
return extensionMaps;
}
public List<Extension> fromEntity(List<ExtensionEntity> entities){
List<Extension> result = new ArrayList<Extension>();
for(ExtensionEntity entity : entities){
Extension.Builder builder = new Extension.Builder(entity.getUrn());
setField(entity, builder);
result.add(builder.build());
}
return result;
}
private void setField(ExtensionEntity entity, Extension.Builder builder) {
for(ExtensionFieldEntity fieldEntity : entity.getFields()){
switch (fieldEntity.getType().getName()) {
case "STRING":
builder.setField(fieldEntity.getName(), "null");
break;
case "INTEGER":
builder.setField(fieldEntity.getName(), BigInteger.ZERO);
break;
case "DECIMAL":
builder.setField(fieldEntity.getName(), BigDecimal.ZERO);
break;
case "BOOLEAN":
builder.setField(fieldEntity.getName(), false);
break;
case "DATE_TIME":
builder.setField(fieldEntity.getName(), new Date(0L));
break;
case "BINARY":
builder.setField(fieldEntity.getName(), ByteBuffer.wrap(new byte[]{}));
break;
case "REFERENCE":
try {
builder.setField(fieldEntity.getName(), new URI("http://www.osiam.org"));
} catch (URISyntaxException e) {
throw new IllegalStateException(e);
}
break;
default:
throw new IllegalArgumentException("Type " + fieldEntity.getType().getName() + " does not exist");
}
}
}
}
@Controller
@RequestMapping(value = "/osiam")
public class OsiamController {
@Autowired
private ExtensionService extensionService;
@RequestMapping(value="/Extensiontypes", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public List<ExtensionMap> getAllExtensions() {
return extensionService.getExtensions();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment