blob: 4ae71a113e181d431f2658aff632e84d92afe535 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.causeway.applib.services.metamodel;
import java.util.Optional;
import org.springframework.lang.Nullable;
import org.apache.causeway.commons.internal.base._Strings;
import org.apache.causeway.schema.metamodel.v2.Collection;
import org.apache.causeway.schema.metamodel.v2.DomainClassDto;
import org.apache.causeway.schema.metamodel.v2.FacetAttr;
import org.apache.causeway.schema.metamodel.v2.FacetHolder.Facets;
import org.apache.causeway.schema.metamodel.v2.MetamodelDto;
import org.apache.causeway.schema.metamodel.v2.Property;
import lombok.val;
import lombok.experimental.UtilityClass;
@UtilityClass
class _AsciiExport {
StringBuilder toAscii(MetamodelDto metamodelDto) {
val sb = new StringBuilder();
metamodelDto
.getDomainClassDto()
.forEach(typeDto->toAscii(typeDto, sb));
return sb;
}
// -- HELPER
private void toAscii(DomainClassDto typeDto, StringBuilder sb) {
sb.append(typeDto.getId()).append("\n");
toAscii(" * ", typeDto.getFacets(), sb);
Optional.ofNullable(typeDto.getProperties())
.map(props->props.getProp())
.ifPresent(list->list.forEach(propDto->toAscii(propDto, sb)));
Optional.ofNullable(typeDto.getCollections())
.map(colls->colls.getColl())
.ifPresent(list->list.forEach(collDto->toAscii(collDto, sb)));
Optional.ofNullable(typeDto.getActions())
.map(acts->acts.getAct())
.ifPresent(list->list.forEach(actDto->toAscii(actDto, sb)));
}
private void toAscii(final String prefix, @Nullable Facets facets, final StringBuilder sb) {
val attrPrefix = _Strings.of(prefix.length()-2, ' ') + " | ";
Optional.ofNullable(facets)
.map(fac->fac.getFacet())
.ifPresent(list->list.forEach(facetDto->{
sb
.append(prefix)
.append(shorten(facetDto.getId()))
.append("\n");
Optional.ofNullable(facetDto.getAttr())
.ifPresent(attrs->attrs.forEach(attr->{
toAscii(attrPrefix, attr, sb);
}));
}));
}
private void toAscii(String attrPrefix, FacetAttr attr, StringBuilder sb) {
if(attr.getName().equals("precedence")
&& attr.getValue().equals("DEFAULT")) {
return; // suppress DEFAULT precedence
}
sb.append(attrPrefix).append(attr.getName()).append('=').append(attr.getValue()).append("\n");
}
private void toAscii(Property propDto, StringBuilder sb) {
sb.append("+-- prop ").append(propDto.getId()).append("\n");
toAscii (" * ", propDto.getFacets(), sb);
}
private void toAscii(Collection collDto, StringBuilder sb) {
sb.append("+-- coll ").append(collDto.getId()).append("\n");
toAscii (" * ", collDto.getFacets(), sb);
}
private void toAscii(org.apache.causeway.schema.metamodel.v2.Action actDto, StringBuilder sb) {
sb.append("+-- act ").append(actDto.getId()).append("\n");
toAscii (" * ", actDto.getFacets(), sb);
}
private String shorten(String id) {
return id.replace("org.apache.causeway.core.metamodel.facets", "..facets");
}
}