001/*
002 * Copyright 2005,2009 Ivan SZKIBA
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 */
016package org.ini4j.spi;
017
018import org.ini4j.Config;
019
020import java.io.PrintWriter;
021import java.io.Writer;
022
023public class IniFormatter extends AbstractFormatter implements IniHandler
024{
025    public static IniFormatter newInstance(Writer out, Config config)
026    {
027        IniFormatter instance = newInstance();
028
029        instance.setOutput((out instanceof PrintWriter) ? (PrintWriter) out : new PrintWriter(out));
030        instance.setConfig(config);
031
032        return instance;
033    }
034
035    @Override public void endIni()
036    {
037        getOutput().flush();
038    }
039
040    @Override public void endSection()
041    {
042        getOutput().print(getConfig().getLineSeparator());
043    }
044
045    @Override public void startIni()
046    {
047        assert true;
048    }
049
050    @Override public void startSection(String sectionName)
051    {
052        setHeader(false);
053        if (!getConfig().isGlobalSection() || !sectionName.equals(getConfig().getGlobalSectionName()))
054        {
055            getOutput().print(IniParser.SECTION_BEGIN);
056            getOutput().print(escapeFilter(sectionName));
057            getOutput().print(IniParser.SECTION_END);
058            getOutput().print(getConfig().getLineSeparator());
059        }
060    }
061
062    private static IniFormatter newInstance()
063    {
064        return ServiceFinder.findService(IniFormatter.class);
065    }
066}