/** * * Copyright * 2009-2015 Jayway Products AB * 2016-2017 Föreningen Sambruk * * Licensed under AGPL, Version 3.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.gnu.org/licenses/agpl.txt * * 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 se.streamsource.dci.restlet.server.sitemesh; import org.restlet.Context; import org.restlet.Request; import org.restlet.Response; import org.restlet.data.Method; import org.restlet.data.Status; import org.sitemesh.BaseSiteMeshContext; import org.sitemesh.content.Content; import org.sitemesh.content.ContentProcessor; import java.io.IOException; import java.io.Writer; /** * JAVADOC */ public class RestletContext extends BaseSiteMeshContext { private Context context; private Request request; public RestletContext( Context context, Request request, ContentProcessor contentProcessor ) { super( contentProcessor ); this.context = context; this.request = request; } @Override protected void decorate( String decoratorPath, Content content, Writer writer ) throws IOException { Response response; if (decoratorPath.startsWith( "riap:" )) { Request decorationRequest = new Request( Method.GET, decoratorPath); decorationRequest.setClientInfo( request.getClientInfo() ); response = context.getServerDispatcher().handle(decorationRequest); } else { Request request = new Request(Method.GET, decoratorPath); response = context.getClientDispatcher().handle( request ); } if (response.getStatus().equals( Status.CLIENT_ERROR_NOT_FOUND )) { } if (!response.getStatus().equals( Status.SUCCESS_OK )) throw new IOException("Could not process decorator "+decoratorPath+":"+ response.getStatus().getDescription()); response.getEntity().write( writer ); } public String getPath() { if (request.getResourceRef().getScheme().equals( "riap" )) return request.getResourceRef().getPath(); else return request.getResourceRef().getRemainingPart(); } }