/*
 * Aipo is a groupware program developed by TOWN, Inc.
 * Copyright (C) 2004-2015 TOWN, Inc.
 * http://www.aipo.com
 *
 * 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/>.
 */
package com.aimluck.eip.services.preexecute.impl;

import java.util.Iterator;

import org.apache.jetspeed.om.profile.Entry;
import org.apache.jetspeed.om.profile.Portlets;
import org.apache.jetspeed.om.profile.Profile;
import org.apache.jetspeed.om.profile.ProfileException;
import org.apache.jetspeed.om.profile.psml.PsmlEntry;
import org.apache.jetspeed.services.Profiler;
import org.apache.jetspeed.services.PsmlManager;
import org.apache.jetspeed.services.idgenerator.JetspeedIdGenerator;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.turbine.om.security.User;
import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;

import com.aimluck.eip.services.preexecute.ALPreExecuteHandler;

/**
 *
 */
public class ALDefaultPreExecuteHanlder extends ALPreExecuteHandler {

  private static final JetspeedLogger logger = JetspeedLogFactoryService
    .getLogger(ALDefaultPreExecuteHanlder.class.getName());

  @Override
  public void migratePsml(RunData rundata, Context context) {
    try {
      Profile profile = Profiler.getProfile(rundata);
      String mediaType = profile.getMediaType();
      Portlets portlets = profile.getDocument().getPortlets();
      @SuppressWarnings("unchecked")
      Iterator<Entry> iterator = portlets.getEntriesIterator();

      User user = rundata.getUser();

      if (!"admin".equals(user.getUserName())
        && !"anon".equals(user.getUserName())
        && !"template".equals(user.getUserName())) {
        if (mediaType.equals("html")) {
          boolean hasMressageEntry = false;
          while (iterator.hasNext()) {
            Entry next = iterator.next();
            String parent = next.getParent();
            if ("Message".equals(parent)) {
              hasMressageEntry = true;
            }
          }

          if (!hasMressageEntry) {
            PsmlEntry entry = new PsmlEntry();
            entry.setId(JetspeedIdGenerator.getNextPeid());
            entry.setParent("Message");
            portlets.addEntry(entry);
            PsmlManager.store(profile);
          }
        }
      }

    } catch (ProfileException e) {
      logger.error(e.getMessage(), e);
    }
  }
}
