/*
This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2010 Servoy BV
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option) any
later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along
with this program; if not, see http://www.gnu.org/licenses or write to the Free
Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
*/
package com.servoy.j2db.server.headlessclient;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ResourceReference;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.protocol.http.WebResponse;
import com.servoy.j2db.IApplication;
import com.servoy.j2db.persistence.IRepository;
import com.servoy.j2db.persistence.RepositoryException;
import com.servoy.j2db.persistence.RootObjectMetaData;
import com.servoy.j2db.persistence.Solution;
import com.servoy.j2db.persistence.SolutionMetaData;
import com.servoy.j2db.server.shared.ApplicationServerRegistry;
import com.servoy.j2db.server.shared.IApplicationServerSingleton;
import com.servoy.j2db.util.Debug;
import com.servoy.j2db.util.HTTPUtils;
import com.servoy.j2db.util.Settings;
import com.servoy.j2db.util.Utils;
/**
* A special wicket {@link WebPage} that displays the solution that can be loaded if the property servoy.allowSolutionBrowsing is not set to false.
*
* @author jcompagner,jblok
*/
public class SelectSolution extends WebPage
{
private static final long serialVersionUID = 1L;
public SelectSolution(final PageParameters parameters) throws RepositoryException
{
this();
}
/**
* Constructor that is invoked when page is invoked without a session.
*
* @param parameters Page parameters
*/
public SelectSolution() throws RepositoryException
{
List<Solution> data = new ArrayList<Solution>();
try
{
IApplicationServerSingleton as = ApplicationServerRegistry.get();
if (as.isDeveloperStartup())
{
data.add(as.getDebugClientHandler().getDebugSmartClient().getCurrent());
}
else
{
if (Utils.getAsBoolean(Settings.getInstance().getProperty("servoy.allowSolutionBrowsing", "true")))
{
RootObjectMetaData[] smds = as.getLocalRepository().getRootObjectMetaDatasForType(IRepository.SOLUTIONS);
int solutionType;
for (RootObjectMetaData element : smds)
{
solutionType = ((SolutionMetaData)element).getSolutionType();
if ((solutionType & (SolutionMetaData.SOLUTION + SolutionMetaData.WEB_CLIENT_ONLY)) > 0)
{
Solution solution = (Solution)as.getLocalRepository().getActiveRootObject(element.getRootObjectId());
if (solution != null)
{
data.add(solution);
}
}
}
}
}
}
catch (RemoteException e)
{
Debug.error(e);
}
add(new ListView<Solution>("solutions", data)
{
private static final long serialVersionUID = 1L;
/**
* Populate the table with Wicket elements
*/
@Override
protected void populateItem(final ListItem<Solution> listItem)
{
Solution sol = listItem.getModelObject();
PageParameters parameters = new PageParameters();
parameters.put("solution", sol.getName());
Link l = new BookmarkablePageLink("solution_link", SolutionLoader.class, parameters);
listItem.add(l);
l.add(new Label("solution_name", sol.getName()));
listItem.add(new Image("login_req", new ResourceReference(IApplication.class, sol.requireAuthentication() ? "images/lock.gif"
: "images/empty.gif")));
// listItem.add(new Label("release", ""+sd.getActiveRelease()));
}
});
}
@Override
protected void setHeaders(WebResponse response)
{
HTTPUtils.setNoCacheHeaders(response.getHttpServletResponse());
}
}