/****************************************************************************** * Copyright (c) 2016 Oracle * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Konstantin Komissarchik - initial implementation and ongoing maintenance ******************************************************************************/ package org.eclipse.sapphire.services.internal; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.eclipse.sapphire.modeling.CapitalizationType; import org.eclipse.sapphire.modeling.annotations.Documentation; import org.eclipse.sapphire.modeling.localization.LocalizationService; import org.eclipse.sapphire.services.DocumentationService; /** * @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a> */ public abstract class StandardDocumentationService extends DocumentationService { protected final static String LINE_BREAK = "[br/]"; protected final static String PARAGRAPH_BREAK = "[pbr/]"; private String content; private List<Topic> topics; @Override protected void init() { super.init(); final StringBuilder content = new StringBuilder(); final List<Topic> topics = new ArrayList<Topic>(); initStandardDocumentationService( content, topics ); this.content = content.toString(); this.topics = Collections.unmodifiableList( topics ); } protected abstract void initStandardDocumentationService( StringBuilder content, List<Topic> topics ); @Override public final String content() { return this.content; } @Override public final List<Topic> topics() { return this.topics; } protected static final List<Topic> convert( final Documentation.Topic[] topics, final LocalizationService localization ) { if( topics.length == 0 ) { return Collections.emptyList(); } else if( topics.length == 1 ) { return Collections.singletonList( convert( topics[ 0 ], localization ) ); } else { final List<Topic> resources = new ArrayList<Topic>( topics.length ); for( Documentation.Topic topic : topics ) { resources.add( convert( topic, localization ) ); } return resources; } } protected static final Topic convert( final Documentation.Topic topic, final LocalizationService localization ) { final String label = localization.text( topic.label().trim(), CapitalizationType.NO_CAPS, false ); return new Topic( label, topic.url() ); } }