# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
#
# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
# Other names may be trademarks of their respective owners.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common
# Development and Distribution License("CDDL") (collectively, the
# "License"). You may not use this file except in compliance with the
# License. You can obtain a copy of the License at
# http://www.netbeans.org/cddl-gplv2.html
# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
# specific language governing permissions and limitations under the
# License.  When distributing the software, include this License Header
# Notice in each file and include the License file at
# nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the GPL Version 2 section of the License file that
# accompanied this code. If applicable, add the following below the
# License Header, with the fields enclosed by brackets [] replaced by
# your own identifying information:
# "Portions Copyrighted [year] [name of copyright owner]"
#
# Contributor(s):
#
# The Original Software is NetBeans. The Initial Developer of the Original
# Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
# Microsystems, Inc. All Rights Reserved.
#
# If you wish your version of this file to be governed by only the CDDL
# or only the GPL Version 2, indicate your decision by adding
# "[Contributor] elects to include this software in this distribution
# under the [CDDL or GPL Version 2] license." If you do not indicate a
# single choice of license, a recipient has the option to distribute
# your version of this file under either the CDDL, the GPL Version 2 or
# to extend the choice of license to its licensees as provided above.
# However, if you add GPL Version 2 code and therefore, elected the GPL
# Version 2 license, then the option applies only if the new code is
# made subject to such option by the copyright holder.

# {0} = name of the file to create
# {1} = path of the folder to create in
EXC_CannotCreateData=Cannot create file {0} in folder {1}.
EXC_CannotCreateExistingData=Cannot create file {0} in folder {1}. This file already exists.

# {0} = name of the folder to create
# {1} = path of the folder to create in
EXC_CannotCreateFolder=Cannot create folder {0} in folder {1}.
EXC_CannotCreateExistingFolder=Cannot create folder {0} in folder {1}. This folder already exists.

# {0} - the file
EXC_CannotLock=Cannot lock read-only file {0}.

# {0} - file that cannot be deleted
# {1} - path of the folder to create from
EXC_CannotDelete=Cannot delete file {0} in {1}.

# {0} = original name of the file (with extension)
# {1} = path of the folder
# {2} = new name of the file (with extension)
EXC_CannotRename=Cannot rename file {0} in {1} to {2}.

# {0} = instance of tested lock
# {1} = name of the file
EXC_InvalidLock=Invalid lock [{0}] for file {1}.

# {0} = name of FS
EXC_CannotRenameRoot=Cannot rename root of filesystem {0}.

# {0} - filesystem
EXC_CannotDeleteRoot=Cannot delete root of filesystem {0}.

EXC_CannotLockRoot=Root cannot be locked.

# {0} - object name
EXC_CannotGetExclusiveAccess=Cannot get exclusive access to {0} (probably opened for reading).

# {0} - object name
EXC_CannotGetSharedAccess=Cannot get shared access to {0} (probably opened for writing).

