/** * 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.isis.core.runtime.services.xmlsnapshot; import org.apache.isis.applib.annotation.DomainService; import org.apache.isis.applib.annotation.NatureOfService; import org.apache.isis.applib.annotation.Programmatic; import org.apache.isis.applib.services.xmlsnapshot.XmlSnapshotService; import org.apache.isis.applib.services.xmlsnapshot.XmlSnapshotServiceAbstract; import org.apache.isis.core.metamodel.adapter.ObjectAdapter; import org.apache.isis.core.runtime.snapshot.XmlSnapshot; import org.apache.isis.core.runtime.snapshot.XmlSnapshotBuilder; import org.apache.isis.core.runtime.system.persistence.PersistenceSession; import org.apache.isis.core.runtime.system.session.IsisSessionFactory; /** * This service allows an XML document to be generated capturing the data of a root entity and specified related * entities. This XML can be used for various purposes, such as mail merge/reporting, or adhoc auditing. * * <p> * This implementation has no UI and there are no other implementations of the service API, and so it annotated * with {@link org.apache.isis.applib.annotation.DomainService}. Because this class is implemented in core, this means * that it is automatically registered and available for use; no further configuration is required. */ @DomainService( nature = NatureOfService.DOMAIN, menuOrder = "" + Integer.MAX_VALUE ) public class XmlSnapshotServiceDefault extends XmlSnapshotServiceAbstract { static class XmlSnapshotServiceDefaultBuilder implements XmlSnapshotService.Builder{ private final XmlSnapshotBuilder builder; public XmlSnapshotServiceDefaultBuilder(final Object domainObject) { builder = new XmlSnapshotBuilder(domainObject); } @Override public void includePath(String path) { builder.includePath(path); } @Override public void includePathAndAnnotation(String path, String annotation) { builder.includePathAndAnnotation(path, annotation); } public XmlSnapshotService.Snapshot build() { XmlSnapshot xmlSnapshot = builder.build(); return xmlSnapshot; } } /** * Creates a simple snapshot of the domain object. */ @Programmatic @Override public XmlSnapshotService.Snapshot snapshotFor(final Object domainObject) { final ObjectAdapter adapter = getPersistenceSession().adapterFor(domainObject); return new XmlSnapshot(adapter); } /** * Creates a builder that allows a custom snapshot - traversing additional associated * properties or collections (using {@link Builder#includePath(String)} and * {@link Builder#includePathAndAnnotation(String, String)}) - to be created. */ @Programmatic @Override public Builder builderFor(final Object domainObject) { return new XmlSnapshotServiceDefaultBuilder(domainObject); } // ////////////////////////////////////// @javax.inject.Inject IsisSessionFactory isisSessionFactory; protected PersistenceSession getPersistenceSession() { return isisSessionFactory.getCurrentSession().getPersistenceSession(); } }