001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.search.lucene.dump;
016    
017    import com.liferay.portal.kernel.util.StringBundler;
018    import com.liferay.portal.kernel.util.StringPool;
019    
020    import java.io.IOException;
021    import java.io.Serializable;
022    
023    import java.util.ArrayList;
024    import java.util.List;
025    
026    import org.apache.lucene.index.IndexCommit;
027    import org.apache.lucene.store.Directory;
028    
029    /**
030     * @author Shuyang Zhou
031     */
032    public class IndexCommitMetaInfo implements Serializable {
033    
034            public IndexCommitMetaInfo(IndexCommit indexCommit) throws IOException {
035                    if (indexCommit == null) {
036                            _empty = true;
037    
038                            return;
039                    }
040    
041                    List<String> fileNames = new ArrayList<String>(
042                            indexCommit.getFileNames());
043    
044                    _segments = new ArrayList<Segment>(fileNames.size());
045    
046                    Directory directory = indexCommit.getDirectory();
047    
048                    for (String fileName : fileNames) {
049                            Segment segment = new Segment(
050                                    fileName, directory.fileLength(fileName));
051    
052                            _segments.add(segment);
053                    }
054    
055                    _generation = indexCommit.getGeneration();
056            }
057    
058            public long getGeneration() {
059                    return _generation;
060            }
061    
062            public List<Segment> getSegments() {
063                    return _segments;
064            }
065    
066            public boolean isEmpty() {
067                    return _empty;
068            }
069    
070            @Override
071            public String toString() {
072                    if (_empty) {
073                            return StringPool.BLANK;
074                    }
075    
076                    StringBundler sb = new StringBundler(_segments.size() * 5 + 3);
077    
078                    sb.append("{fileInfos[");
079    
080                    for (int i = 0; i < _segments.size(); i++) {
081                            Segment fileInfo = _segments.get(i);
082    
083                            sb.append("fileName=");
084                            sb.append(fileInfo._fileName);
085                            sb.append(", fileSize=");
086                            sb.append(fileInfo._fileSize);
087    
088                            if ((i + 1) < _segments.size()) {
089                                    sb.append(", ");
090                            }
091                    }
092    
093                    sb.append("], generation=");
094                    sb.append(_generation);
095                    sb.append("}");
096    
097                    return sb.toString();
098            }
099    
100            public class Segment implements Serializable {
101    
102                    public Segment(String fileName, long fileSize) {
103                            _fileName = fileName;
104                            _fileSize = fileSize;
105                    }
106    
107                    public String getFileName() {
108                            return _fileName;
109                    }
110    
111                    public long getFileSize() {
112                            return _fileSize;
113                    }
114    
115                    @Override
116                    public String toString() {
117                            StringBundler sb = new StringBundler(5);
118    
119                            sb.append("{_fileName=");
120                            sb.append(_fileName);
121                            sb.append(", _fileSize=");
122                            sb.append(_fileSize);
123                            sb.append("}");
124    
125                            return sb.toString();
126                    }
127    
128                    private String _fileName;
129                    private long _fileSize;
130    
131            }
132    
133            private boolean _empty;
134            private long _generation;
135            private List<Segment> _segments;
136    
137    }