001/* 002 * (C) Copyright 2017 Nuxeo (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Florent Guillaume 018 */ 019package org.nuxeo.ecm.admin; 020 021import static org.jboss.seam.ScopeType.CONVERSATION; 022 023import java.io.Serializable; 024import java.util.ArrayList; 025import java.util.Collections; 026import java.util.HashMap; 027import java.util.List; 028import java.util.Map; 029 030import org.jboss.seam.annotations.Name; 031import org.jboss.seam.annotations.Scope; 032import org.nuxeo.runtime.api.Framework; 033import org.nuxeo.runtime.migration.MigrationDescriptor; 034import org.nuxeo.runtime.migration.MigrationDescriptor.MigrationStepDescriptor; 035import org.nuxeo.runtime.migration.MigrationService; 036import org.nuxeo.runtime.migration.MigrationService.MigrationStatus; 037import org.nuxeo.runtime.migration.MigrationServiceImpl; 038 039/** 040 * Seam bean that wraps the {@link MigrationService} service to provide a JSF admin UI. 041 */ 042@Name("migrationAdmin") 043@Scope(CONVERSATION) 044public class MigrationAdminBean implements Serializable { 045 046 private static final long serialVersionUID = 1L; 047 048 public List<Map<String, Object>> getMigrationInfos() { 049 MigrationService migrationService = Framework.getService(MigrationService.class); 050 List<Map<String, Object>> migrationInfos = new ArrayList<>(); 051 052 Map<String, MigrationDescriptor> descriptors = ((MigrationServiceImpl) migrationService).getMigrationDescriptors(); 053 descriptors.values().forEach(descr -> { 054 MigrationStatus status = migrationService.getStatus(descr.getId()); 055 Map<String, Object> migrationInfo = new HashMap<>(); 056 migrationInfo.put("id", descr.getId()); 057 migrationInfo.put("descriptor", descr); 058 migrationInfo.put("status", status); 059 if (!status.isRunning()) { 060 // compute available steps 061 String state = status.getState(); 062 List<MigrationStepDescriptor> steps = new ArrayList<>(); 063 for (MigrationStepDescriptor step : descr.getSteps().values()) { 064 if (step.getFromState().equals(state)) { 065 steps.add(step); 066 } 067 } 068 // sort steps by id 069 Collections.sort(steps, (a, b) -> a.getId().compareTo(b.getId())); 070 migrationInfo.put("steps", steps); 071 } 072 migrationInfos.add(migrationInfo); 073 }); 074 // sort migrationInfos by id 075 Collections.sort(migrationInfos, (a, b) -> ((String) a.get("id")).compareTo((String) b.get("id"))); 076 077 return migrationInfos; 078 } 079 080 public void runStep(String id, String step) { 081 MigrationService migrationService = Framework.getService(MigrationService.class); 082 migrationService.runStep(id, step); 083 } 084 085}