Calcular a data final de um projeto

Oi boa tarde, estou com problemas para desenvolver uma calculadora de prazos.
O usuário deve inserir a data inicial e a quantidade de dias de projeto, ai a calculadora da como resultado qual a data final em dias uteis desse projeto e uma lista em XML ou JSON com os feriados e datas comemorativas desse período.

isoo foi oque eu consegui fazer, mas não funciona, poderiam me ajudar?

package command;

import java.util.Calendar;
import java.util.Date;

public class Calculadora{
private static final int HOLIDAY = 0;

public static int nuDiasExecutadosUteis (Date inicio) {
	//Numero de dias que se passaram, sem contar com a data de inicio e data de fim
	//Observação: Contando que a data inicio e data fim sejam dias uteis
	int nuDiasExecutados = (int) (new Date().getTime() - inicio.getTime ()) / 86400000;
	int totalDiasExecutadosUteis = 0;
	Calendar cal = Calendar.getInstance();
	cal.setTime(inicio);
	for (int i = 1; i < nuDiasExecutados ; i++){
		//Acrescenta mais um dia na data para poder verificar se é dia util
		cal.add(Calendar.DATE, 1);
		//Verifica se não é dia uti
		if (cal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY && cal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY
			&& cal.get(Calendar.DAY_OF_WEEK) != HOLIDAY ) {
	    	totalDiasExecutadosUteis += 1;
		}
	}
return totalDiasExecutadosUteis;
}

}

Acredito que antes de mais nada, você deve considerar ter uma base para cadastro de feriados, ou se tiver uma api gratuita que possa consultar… mas lembre-se que existem feriados locais;

Sim toda essa parte eu ja tenho pronta, e ja criei uma pagina para cadastrar os feriados locais e pontos facultativos. Falta só a calculadora/calendario. Encontrei muitas em PHP, porem meu projeto é restrito ao Java

Tenho algo parecido aqui:

public static Date calculaPrazoDataDiasUteis(Date data, int dias) throws Exception{

	//Este método receberá a data inicial e a quantidade de dias
	int i = 0;
	Calendar c = Calendar.getInstance();
	c.setTime(data);
	
	//Inicia o contador..
	while(i < dias){
		if(validaDiaUtil(c.getTime())){
			i++;
		}
		c.add(Calendar.DATE, 1);
	}
	while(!validaDiaUtil(c.getTime())){
		c.add(Calendar.DATE, 1);
	}
	return c.getTime();
}

private static boolean validaDiaUtil(Date novaData) throws SQLException {
return novaData.getDay() != 0 && novaData.getDay() != 6 && !validaFeriado(novaData);
}

private static boolean validaFeriado(Date data) throws SQLException {
FeriadoDao feriadoDao = new FeriadoDao();
return !feriadoDao.validaFeriado(data);
}

Nao sei se te contempla.

E onde eu chamaria o banco pra ele pular os feriados e datas locais cadastradas?

o metodo validaFeriado da classe FeriadoDao

public boolean validaFeriado(Date data) throws SQLException {

            String script = "select * from feriados f where f.data = :data";
	preparedStatement = conectarRetorno().prepareStatement(script);
	preparedStatement.setDate(1, new java.sql.Date(data.getTime()));
	
	String descFeriado = "";
	
	ResultSet rs = preparedStatement.executeQuery();
	
	if(rs.next()){
		descFeriado = rs.getString("FER_DESCRICAO");
	}
	
	return descFeriado.equals("") || descFeriado.equals("PRORROGAÇÃO PAGAMENTO DIREX");
}

Ai depende da sua implementação, você pode criar uma tabela que em uma das colunas tem o campo data, daí se a data que você enviou existir nesta tabela, você retorna true indicando que é um feriado.

Neste método estou fazendo um inverso, retorno true quando não é feriado.