/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.web.main; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; import com.enonic.cms.framework.util.HttpServletUtil; import com.enonic.cms.core.product.LicenseChecker; import com.enonic.cms.core.product.NopLicenseChecker; import com.enonic.cms.core.product.ProductVersion; import com.enonic.cms.core.structure.SiteEntity; import com.enonic.cms.store.dao.SiteDao; import com.enonic.cms.upgrade.UpgradeService; /** * Controller for displaying the welcome page, the root page for an installation. */ @Controller public final class WelcomeController { private UpgradeService upgradeService; private SiteDao siteDao; private LicenseChecker licenseChecker; @Autowired public void setUpgradeService( final UpgradeService upgradeService ) { this.upgradeService = upgradeService; } @Autowired public void setSiteDao( final SiteDao siteDao ) { this.siteDao = siteDao; } @Autowired(required = false) public void setLicenseChecker( final LicenseChecker licenseChecker ) { this.licenseChecker = licenseChecker; } private List<Site> createSiteList() { final List<Site> sites = new ArrayList<Site>(); for ( final SiteEntity entity : this.siteDao.findAll() ) { final String code = entity.getLanguage() == null ? "" : " (" + entity.getLanguage().getCode() + ")"; sites.add( new Site( entity.getName() + code, entity.getKey().toInt() ) ); } return sites; } public class Site { private String displayString; private int key; public Site( final String displayString, final int key ) { this.displayString = displayString; this.key = key; } public String getDisplayString() { return displayString; } public int getKey() { return key; } } @RequestMapping(value = "/", method = RequestMethod.GET, produces = MediaType.TEXT_HTML_VALUE) public ModelAndView welcomePage( final HttpServletRequest req, final HttpServletResponse response ) { HttpServletUtil.setCacheControlNoCache( response ); final boolean modelUpgradeNeeded = this.upgradeService.needsUpgrade(); final boolean softwareUpgradeNeeded = this.upgradeService.needsSoftwareUpgrade(); final boolean upgradeNeeded = modelUpgradeNeeded || softwareUpgradeNeeded; HashMap<String, Object> model = new HashMap<String, Object>(); model.put( "versionTitle", ProductVersion.getFullTitle() ); model.put( "versionTitleVersion", ProductVersion.getFullTitleAndVersion() ); model.put( "versionCopyright", ProductVersion.getCopyright() ); model.put( "baseUrl", createBaseUrl( req ) ); if ( !upgradeNeeded ) { model.put( "sites", createSiteList() ); } model.put( "upgradeNeeded", upgradeNeeded ); model.put( "modelUpgradeNeeded", modelUpgradeNeeded ); model.put( "softwareUpgradeNeeded", softwareUpgradeNeeded ); model.put( "upgradeFrom", this.upgradeService.getCurrentModelNumber() ); model.put( "upgradeTo", this.upgradeService.getTargetModelNumber() ); if ( this.licenseChecker == null ) { this.licenseChecker = new NopLicenseChecker(); } model.put( "license", this.licenseChecker ); return new ModelAndView( "welcomePage", model ); } private String createBaseUrl( final HttpServletRequest req ) { final String url = ServletUriComponentsBuilder.fromRequest( req ).build().toString(); if ( url.endsWith( "/" ) ) { return url.substring( 0, url.length() - 1 ); } else { return url; } } }