blob: 72a66a1dd5aae7ad9534c061ade5db007280b6b6 [file] [log] [blame]
/*
* Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0, which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package com.sun.tools.xjc;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
import com.sun.codemodel.CodeWriter;
import com.sun.codemodel.JPackage;
import com.sun.codemodel.writer.FilterCodeWriter;
/**
* {@link CodeWriter} that reports progress to {@link XJCListener}.
*/
final class ProgressCodeWriter extends FilterCodeWriter {
private int current;
private final int totalFileCount;
public ProgressCodeWriter( CodeWriter output, XJCListener progress, int totalFileCount ) {
super(output);
this.progress = progress;
this.totalFileCount = totalFileCount;
if(progress==null)
throw new IllegalArgumentException();
}
private final XJCListener progress;
@Override
public Writer openSource(JPackage pkg, String fileName) throws IOException {
report(pkg,fileName);
return super.openSource(pkg, fileName);
}
@Override
public OutputStream openBinary(JPackage pkg, String fileName) throws IOException {
report(pkg,fileName);
return super.openBinary(pkg,fileName);
}
/**
* Report progress to {@link XJCListener}.
* @param pkg The package of file being written. Value of {@code null} means that file has no package.
* @param fileName The file name being written. Value can't be {@code null}.
*/
private void report(final JPackage pkg, final String fileName) {
if (fileName == null) {
throw new IllegalArgumentException("File name is null");
}
final String pkgName;
final String fileNameOut;
if (pkg != null && (pkgName = pkg.name().replace('.', File.separatorChar)).length() > 0 ) {
final StringBuilder sb = new StringBuilder(fileName.length() + pkgName.length() + 1);
sb.append(pkgName);
sb.append(File.separatorChar);
sb.append(fileName);
fileNameOut = sb.toString();
} else {
fileNameOut = fileName;
}
if(progress.isCanceled())
throw new AbortException();
progress.generatedFile(fileNameOut, current++, totalFileCount);
}
}