class ImmutableThingFromCopyBuilder implements ThingBuilder, ThingBuilder.FromCopy {

    public static ImmutableThingFromCopyBuilder of(final Thing thing) {
        checkNotNull(thing, "Thing");

        final ImmutableThingFromCopyBuilder result = new ImmutableThingFromCopyBuilder();
        thing.getEntityId().ifPresent(result::setId);
        thing.getAccessControlList().ifPresent(result::setPermissions);
        thing.getPolicyEntityId().ifPresent(result::setPolicyId);
        thing.getAttributes().ifPresent(result::setAttributes);
        thing.getDefinition().ifPresent(result::setDefinition);
        thing.getFeatures().ifPresent(result::setFeatures);
        thing.getLifecycle().ifPresent(result::setLifecycle);
        thing.getRevision().ifPresent(result::setRevision);
        thing.getModified().ifPresent(result::setModified);
        thing.getCreated().ifPresent(result::setCreated);
        thing.getMetadata().ifPresent(result::setMetadata);

        return result;
    }

    private  ImmutableThingFromCopyBuilder();

}