// Path: public-api/src/main/java/info/rolandkrueger/userservice/api/_internal/model/AbstractBaseApiData.java
// public abstract class AbstractBaseApiData<R extends AbstractResource> {
//     private Collection<Link> links;
// 
//     /**
//      * Creates a new resource object for this data type. The method uses the self link to create the resource.
//      *
//      * @param self link to the resource
//      * @return a new resource object that represents this data type on the server side
//      * @see #getSelf()
//      */
//     protected abstract R createNewResource(Link self);
// 
//     /**
//      * Provides a collection of all resource links that could be read from the resource. These links lead to related
//      * resources and can be used to create new instances of subclasses of {@link AbstractResource} or
//      * {@link info.rolandkrueger.userservice.api._internal.AbstractPagedResource}.
//      *
//      * @return the collection of resource links
//      */
//     public final Collection<Link> getLinks() {
//         return links;
//     }
// 
//     /**
//      * Sets the list of the available links to related resources. Will be called by the JSON unmarshaller.
//      *
//      * @param links collection of resource links
//      */
//     public final void setLinks(Collection<Link> links) {
//         this.links = links;
//     }
// 
//     /**
//      * Provides the link to self.
//      *
//      * @return the self link
//      */
//     public final Link getSelf() {
//         return links == null ? null : links.iterator().next();
//     }
// 
//     /**
//      * Provides the resource object that corresponds to this data type.
//      * <p/>
//      * Creates a new instance of {@link <R>} on every invocation. Is ignored by the JSON processor when transferring an
//      * {@link AbstractBaseApiData} to the server.
//      *
//      * @return a new instance of a corresponding sub-class of {@link AbstractResource} for this data type.
//      */
//     @JsonIgnore
//     public final R getResource() {
//         R resource = createNewResource(getSelf());
//         return resource;
//     }
// }
// 
// Path: public-api/src/main/java/info/rolandkrueger/userservice/api/resources/AuthorityResource.java
// public class AuthorityResource extends AbstractResource<AuthorityApiData> implements CanUpdateResource,
//         CanDeleteResource {
// 
//     public AuthorityResource(Link self, AuthorityApiData data) {
//         super(self, data);
//     }
// 
//     @Override
//     protected ParameterizedTypeReference<AuthorityApiData> getParameterizedTypeReference() {
//         return new ParameterizedTypeReference<AuthorityApiData>() {
//         };
//     }
// 
//     @Override
//     protected Class<AuthorityApiData> getResourceType() {
//         return AuthorityApiData.class;
//     }
// 
//     @Override
//     public void delete() throws RestClientException {
//         super.deleteInternal(getApiData());
//     }
// 
//     @Override
//     public void update() throws RestClientException {
//         super.updateInternal(getApiData());
//     }
// }


import com.google.common.base.MoreObjects;
import info.rolandkrueger.userservice.api._internal.model.AbstractBaseApiData;
import info.rolandkrueger.userservice.api.resources.AuthorityResource;
import org.springframework.hateoas.Link;
import org.springframework.security.core.GrantedAuthority;
import java.time.LocalDateTime;

    public void setLastModified(LocalDateTime lastModified) {
        this.lastModified = lastModified;
    }

    public String getAuthority() {
        return authority;
    }

    public void setAuthority(String authority) {
        this.authority = authority;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return MoreObjects.toStringHelper(AuthorityApiData.class)
                .add("authority", authority)
                .add("description", description)
                .toString();
    }

    @Override
// Path: public-api/src/main/java/info/rolandkrueger/userservice/api/_internal/model/AbstractBaseApiData.java
// public abstract class AbstractBaseApiData<R extends AbstractResource> {
//     private Collection<Link> links;
// 
//     /**
//      * Creates a new resource object for this data type. The method uses the self link to create the resource.
//      *
//      * @param self link to the resource
//      * @return a new resource object that represents this data type on the server side
//      * @see #getSelf()
//      */
//     protected abstract R createNewResource(Link self);
// 
//     /**
//      * Provides a collection of all resource links that could be read from the resource. These links lead to related
//      * resources and can be used to create new instances of subclasses of {@link AbstractResource} or
//      * {@link info.rolandkrueger.userservice.api._internal.AbstractPagedResource}.
//      *
//      * @return the collection of resource links
//      */
//     public final Collection<Link> getLinks() {
//         return links;
//     }
// 
//     /**
//      * Sets the list of the available links to related resources. Will be called by the JSON unmarshaller.
//      *
//      * @param links collection of resource links
//      */
//     public final void setLinks(Collection<Link> links) {
//         this.links = links;
//     }
// 
//     /**
//      * Provides the link to self.
//      *
//      * @return the self link
//      */
//     public final Link getSelf() {
//         return links == null ? null : links.iterator().next();
//     }
// 
//     /**
//      * Provides the resource object that corresponds to this data type.
//      * <p/>
//      * Creates a new instance of {@link <R>} on every invocation. Is ignored by the JSON processor when transferring an
//      * {@link AbstractBaseApiData} to the server.
//      *
//      * @return a new instance of a corresponding sub-class of {@link AbstractResource} for this data type.
//      */
//     @JsonIgnore
//     public final R getResource() {
//         R resource = createNewResource(getSelf());
//         return resource;
//     }
// }
// 
// Path: public-api/src/main/java/info/rolandkrueger/userservice/api/resources/AuthorityResource.java
// public class AuthorityResource extends AbstractResource<AuthorityApiData> implements CanUpdateResource,
//         CanDeleteResource {
// 
//     public AuthorityResource(Link self, AuthorityApiData data) {
//         super(self, data);
//     }
// 
//     @Override
//     protected ParameterizedTypeReference<AuthorityApiData> getParameterizedTypeReference() {
//         return new ParameterizedTypeReference<AuthorityApiData>() {
//         };
//     }
// 
//     @Override
//     protected Class<AuthorityApiData> getResourceType() {
//         return AuthorityApiData.class;
//     }
// 
//     @Override
//     public void delete() throws RestClientException {
//         super.deleteInternal(getApiData());
//     }
// 
//     @Override
//     public void update() throws RestClientException {
//         super.updateInternal(getApiData());
//     }
// }


// Path: public-api/src/main/java/info/rolandkrueger/userservice/api/model/AuthorityApiData.java
import com.google.common.base.MoreObjects;
import info.rolandkrueger.userservice.api._internal.model.AbstractBaseApiData;
import info.rolandkrueger.userservice.api.resources.AuthorityResource;
import org.springframework.hateoas.Link;
import org.springframework.security.core.GrantedAuthority;
import java.time.LocalDateTime;


    public void setLastModified(LocalDateTime lastModified) {
        this.lastModified = lastModified;
    }

    public String getAuthority() {
        return authority;
    }

    public void setAuthority(String authority) {
        this.authority = authority;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return MoreObjects.toStringHelper(AuthorityApiData.class)
                .add("authority", authority)
                .add("description", description)
                .toString();
    }

    @Override
    protected AuthorityResource createNewResource(Link self) {